Page 1 sur 2

zippé un fichier csv et l'envoyer sur ftp

Posté : 09 juil. 2015, 23:49
par Julia
Bonsoir à toutes et à tous de phpfrance,

J'ai un fichier csv généré automatiquement que je souhaite zipper et envoyer sur le ftp d'un tiers pour lequel je n'ai qu'un droit en écriture.

Ce fichier n'est lu qu'une fois par jour à une heure très tardive.

J'ai trouvé un tuto utile pour faire une interaction sur le ftp :
https://openclassrooms.com/courses/inte ... erveur-ftp

un autre tuto pour la compression :
http://sdz.tdct.org/sdz/les-fonctions-zip-en-php.html

sauf que j'ai un zipp vide.

avez-vous un tuto utile qui marche pour transformer mon csv en zipp,

Est-ce qu'il vous faut mes morceau de code pour me dire d'ou peut venir mon erreur ?

Merci d'avance

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 10 juil. 2015, 00:14
par julia
Re-

J'ai trouvé ce lien :
http://www.wakdev.com/wiki/php-mysql/66 ... c-php.html

le truc c'est que mon fichier est automatique et donc n'est pas stocké.

la fin de mon fichier resemble à ça :

Code : Tout sélectionner

} $ocdb->closeDB();} //$nom_fichier = "rss11-test" . date("Y-m-d", time()); $nom_fichier = "monscv"; header("Content-type: application/vnd.ms-excel"); //header("Content-disposition: csv" . date("Y-m-d") . ".csv"); header("Content-disposition: filename=" . $nom_fichier . ".csv"); $liste_csv = mb_convert_encoding($liste_csv, 'ISO-8859-1', 'UTF-8'); header("Content-type: text/csv; charset=UTF-8"); header("Content-disposition: attachment; filename=" . $nom_fichier . ".csv; charset=UTF-8"); print $liste_csv; exit;

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 10 juil. 2015, 01:32
par tof73
si l'accès au fichier csv pour son adresse http ne fonctionne pas, alors il reste http://php.net/manual/fr/function.file-put-contents.php à ajouter pour sauver une copie en local.

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 10 juil. 2015, 10:09
par julia
Bonjour,

Merci de votre retour.

mon csv fonctionne, si je vais sur son lien, exemple :

ht*p://monsite.fr/lien-de-mon-csv.csv quand je vais sur ce lien il se charge

je souhaite dans un premier temps le zippé pour pouvoir le transféré au ftp.

oui j'avais lu cette fonction au même titre que d'autres fonctions zipp mais j'ai cru comprendre que c'est pour faire du cron.

je ne suis déjà pas très douer pour du zipp alors le cron..

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 14 juil. 2015, 14:39
par julia
Bonjour,

Avec quelques recherches de plus j'ai un code qui commence à marcher, je stock le fichier csv, je le zipp mais pas comme je le souhaite, je souhaite souhaite avoir que le fichier dans le zipp et là j'ai contenu/lib/lecsv.csv :

Code : Tout sélectionner

} $ocdb->closeDB();} $nom_fichier = "monscv"; header("Content-type: application/vnd.ms-excel"); //header("Content-disposition: csv" . date("Y-m-d") . ".csv"); header("Content-disposition: filename=" . $nom_fichier . ".csv"); $liste_csv = mb_convert_encoding($liste_csv, 'ISO-8859-1', 'UTF-8'); header("Content-type: text/csv; charset=UTF-8"); header("Content-disposition: attachment; filename=" . $nom_fichier . ".csv; charset=UTF-8"); file_put_contents('../contenu/lib/lecsv.csv', $liste_csv); $zip = new zipfile( ) ; //on crée une nouvelle instance zip $nom_fichier1 = "../contenu/lib/lecsv.csv" ; //nom du fichier à compresser $fo = fopen($nom_fichier1,'r') ; //on ouvre le fichier $contenu = fread($fo, filesize($nom_fichier1)) ; //on enregistre le contenu fclose($fo) ; //on ferme le fichier $zip->addfile($contenu, $nom_fichier1) ; //on ajoute le fichier $archive_zip = $zip->file() ; //on associe l'archive $open = fopen( "../contenu/lib/lecsv.zip" , "wb"); //crée le fichier zip fwrite($open, $archive_zip); //enregistre le contenu de l'archive fclose($open); //ferme l'archive //print $liste_csv; exit;
Merci de toute aide..

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 22 juil. 2015, 10:18
par julia
Bonjour,

Un petit up pour une idée ?!..

Merci d'avance..

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 22 juil. 2015, 11:04
par @rthur
Bonjour Julia,

Regarde la doc de la fonction addfile() et notamment l'exemple 1 : http://php.net/manual/en/ziparchive.add ... xample-826

En fait dans ton code ci-dessous, tu fais des choses pas forcément utiles :
$nom_fichier1 = "../contenu/lib/lecsv.csv" ; //nom du fichier à compresser
 $fo = fopen($nom_fichier1,'r') ; //on ouvre le fichier
 $contenu = fread($fo, filesize($nom_fichier1)) ; //on enregistre le contenu
 fclose($fo) ; //on ferme le fichier
 
 $zip->addfile($contenu, $nom_fichier1) ; //on ajoute le fichier
En premier paramètre de addfile() tu peux directement mettre le chemin du fichier (pas besoin de récupérer son contenu)
Et en deuxième paramètre, et c'est là qu'est ton problème actuel, c'est le nom du fichier dans le zip avec son chemin éventuel. A l'heure actuelle, tu lui indiques "contenu/lib/lecsv.csv" alors que tu voudrais n'avoir que lecsv.csv

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 24 juil. 2015, 10:50
par julia
Bonjour,

Merci, je m'y code ce soir..

a+

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 26 juil. 2015, 04:55
par julia
Bonsoir,

Merci encore, effectivement c'est bien plus simple, j'ai du simplement créer le fichier zip.

Puis le code :

Code : Tout sélectionner

$zip = new ZipArchive; if ($zip->open('../contenu/lib/lecsv.zip') === TRUE) { $zip->addFile('../content/lib/lecsv.csv', 'lecsv.csv'); $zip->close(); echo 'ok'; } else { echo 'failed'; }
Bon maintenant c'est envoyé le fichier stocké sur ftp, ça sera une première.

Faut t-il ftp_get() est bien pour le local et ftp_put() et pour envoyer depuis ftp c'est bien ça ?

ftp_get à la suite de mon code me semble plus approprié non ?

Code : Tout sélectionner

<?php // Définition de quelques variables $local_file = 'local.zip'; $server_file = 'server.zip'; // Mise en place d'une connexion basique $conn_id = ftp_connect($ftp_server); // Identification avec un nom d'utilisateur et un mot de passe $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // Tentative de téléchargement du fichier $server_file et sauvegarde dans le fichier $local_file if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { echo "Le fichier $local_file a été écris avec succès\n"; } else { echo "Il y a un problème\n"; } // Fermeture de la connexion ftp_close($conn_id); ?>
Merci encore de toute aide.

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 26 juil. 2015, 06:42
par @rthur
Bon maintenant c'est envoyé le fichier stocké sur ftp, ça sera une première.
Faut t-il ftp_get() est bien pour le local et ftp_put() et pour envoyer depuis ftp c'est bien ça ?
A ton avis ? ;-)
ftp_get() télécharge le fichier remote_file depuis le serveur FTP, et le sauve dans le fichier local local_file.
ftp_put() enregistre le fichier local_file sur le serveur FTP.

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 26 juil. 2015, 12:29
par julia
Bonjour,

Merci mais please pas de moquerie alors..

Pour moi ni l'un ni l'autre car même si je l'envoie sur un ftp, il est tout de même stocké dans un ftp ?! 8-|

Le truc c'est que j'ai un lien de fichier de stockage, pour moi il n'est pas en local..

Allez je pense que ftp_put() peut tout de même faire l'affaire.

Verdicte, suis-je à côté de la plaque ?

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 26 juil. 2015, 12:46
par @rthur
Merci mais please pas de moquerie alors..
Ah, je ne me permettrais pas... :D ...et puis c'est pas le genre de la maison... :^o
Pour moi ni l'un ni l'autre car même si je l'envoie sur un ftp, il est tout de même stocké dans un ftp ?! 8-|
Le truc c'est que j'ai un lien de fichier de stockage, pour moi il n'est pas en local..
Allez je pense que ftp_put() peut tout de même faire l'affaire.
Verdicte, suis-je à côté de la plaque ?
Le problème, c'est que je ne suis pas sûr de comprendre ce que tu veux faire pour pouvoir te répondre précisément.

Le FTP, c'est juste un système de transfert de fichier d'un ordinateur A à un autre ordinateur B.
Du coup, un fichier ne peut pas être "stocké dans un FTP", ça ne veut rien dire.
Il peut être stocké sur un ordinateur (ou serveur) lui-même accessible par FTP.

Dans le cas d'une utilisation avec PHP, il y a toujours 2 serveurs :
- le serveur local, c'est à dire le serveur où s'exécute ton script PHP.
- le serveur distant, c'est à dire un autre serveur où tu va récupérer ou déposer des fichiers.

Avec ftp_get(), tu vas récupérer des fichiers d'un serveur distant pour les enregistrer sur le serveur local (celui où s'exécute ton script PHP)
Avec ftp_put(), tu vas envoyer des fichiers qui sont sur le même serveur que ton script PHP (le serveur local) vers un autre serveur (le serveur distant).

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 26 juil. 2015, 13:33
par julia
Re-Bonjour,

Je vais tacher d'être clair.

Je souhaite envoyer un fichier csv à un site.

Il ne prend qu'un fichier zippé que j'envoie via ftp dont j'ai un accès en écriture uniquement.

Donc pour éviter de le faire manuellement je souhaite que ça se face automatiquement.

Les étapes précédentes avait pour but de transformer un xml en csv zippé qui est stocké sur l'un des dossiers du site web.

Est-ce plus claire maintenant ou il faut d'autres détails ?

Merci encore..

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 26 juil. 2015, 16:46
par @rthur
Donc effectivement c'est ftp_put() qu'il faut utiliser

Re: zippé un fichier csv et l'envoyer sur ftp

Posté : 27 juil. 2015, 16:01
par julia
Bonjour,

Merci je m'entraine ce soir, la encore ça va être une nouvelle étape nouvelle pour moi.. :shock:

a+