kishkaya
Messages postés365Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention17 avril 2008
-
22 août 2007 à 11:40
kishkaya
Messages postés365Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention17 avril 2008
-
22 août 2007 à 16:37
Bonjour,
Afin de transferé des fichier d'un serveur vers un autre j'utilise le protocole FTP.
La fonction copy autorisant les url distante je voulais m'en servir.
Malheureusement l'envoie de fichier ftp echoue quand on veut ecraser un fichier existant. Il est indiquer sur php.net :
"Si vous devez réécrire des fichiers existants
en utilisant ftp, spécifiez l'option <var>overwrite</var> dans le
contexte et ouvrez le fichier en écriture".
Or, la fonction copy n'admet pas de contexte, dois je donc comprendre que je n'ai pas d'autre choix que d'utiliser fopen ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 22 août 2007 à 14:13
Hello,
non :
Note: Depuis PHP 4.3.0, les deux paramètres <tt>source</tt> et
<tt>dest</tt> peuvent être des URL si les gestionnaires
d'URL ont été activés. Voyez la fonction
fopen() pour plus de détails.
Si <tt>dest</tt> est une URL, la copie peut échouer si
ce protocole ne supporte pas l'écrasement de fichiers existants.
Cela veut dire que si tu fais un truc du genre
copy('ftp://serveurftp1/bla.txt', 'ftp://monftp.com/bla.txt');
il faut que la configuration de ton php le tolère (et que les serveurs aussi évidemment) avec le gestionnaire d'URL. Vois la fonction fopen() pour en savoir plus sur le gestionnaire d'URL et suis les liens. Ca ne veut pas dire que tu dois d'abord utiliser fopen().
Pourquoi n'utilises-tu pas les fonctions ftp_*() dédiées? Ou CURL ?
kishkaya
Messages postés365Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention17 avril 2008 22 août 2007 à 15:00
Bonjour et merci pour vos réponses.
J'utilise la fonction copy et j'arrive à copier sur mon ftp (où j'ai un user anonymous) un fichier depuis mon premier serveur. Malheureusement je ne peux copier qu'un fichier qui n'existe pas déjà.
Le protocole FTP accepte l'ecrasement de fichier. Mais je ne sais pas comment le mettre par default.
1- J'ai utilisé copy car je savais qu'elle acceptait ce protocole et les adresses distantes. De plus avec les fonction ftp_* le probleme est qu'elles renvoient "true" lorsque l'ordre a été PASSE sur le serveur FTP et non pas quand il a été EXECUTE. J'utilise le ftp pour copier des fichiers sons. Puis je lance l'encodage du fichier son à l'aide d'un GET HTTP sur le serveur 2 (celui ou se trouve le FTP). Mais l'encodage plante souvent car le FTP n'a pas fini de copier le fichier son (et cela avec ftp_put ou ftp_fput).
La deuxieme raison qui m'a fait ne pas choisir les fonction ftp_* est celle la :
"Si vous voulez uniquement
lire ou écrire un fichier sur un serveur FTP, utilisez plutôt le gestionnaire
<var>ftp://</var> wrapper
avec les fonctions de système de fichiers qui fournissent une interface simple et intuitive" (cf php.net)
2- je n'ai pas utilisé curl car je ne sais pas si il est inclu de base en tant qu'extension de php... Et parce que je ne connait pas bien ce module.
Je me renseigne sur Curl. en attendant si vous savez comment mettre le mode Overwrite par defaut pour les protocoles SFTP et FTP je suis tres prenneur.
kishkaya
Messages postés365Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention17 avril 2008 22 août 2007 à 16:34
Mea culpa !!!
Les fonctions FTP marchent tres bien, je m'en suis rendu compte en utilisant libcurl!
En fait le probleme venait du transfert FTP ascii ou binaire.
Avec Curl je desactivais les entetes textuelles et au final le fichier son s'encodait bien une fois l'encodage lancé). Lorsque je les ai activées, l'encodage echoué.
Je viens de retenter avec les fonctions ftp_put/ftp_get ca marche nickel quand on fait la transaction en binaire (FTP_BINARY) !!.
Donc j'ai dit des conneries, ces fonctions renvoient bien true lorsque l'ordre a été EXECUTE.
Merci a vous deux pour votre aide ca marche nickel maintenant.
_Marikou
Vous n’avez pas trouvé la réponse que vous recherchez ?