Copy() et context [Résolu]

kishkaya 366 Messages postés samedi 26 juin 2004Date d'inscription 17 avril 2008 Dernière intervention - 22 août 2007 à 11:40 - Dernière réponse : kishkaya 366 Messages postés samedi 26 juin 2004Date d'inscription 17 avril 2008 Dernière intervention
- 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 ?

_Marikou
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Yoteco 112 Messages postés lundi 20 octobre 2003Date d'inscription 5 novembre 2008 Dernière intervention - 22 août 2007 à 12:24
3
Merci
Salut,

Oui... ou alors regarde d'abord si le fichier existe déjà sur le serveur FTP supprime le et envoie le nouveau fichier.

Ce qui est incompréhensible, c'est que le monde soit compréhensible. (Albert Einstein)

Merci Yoteco 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de Yoteco
Meilleure réponse
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 22 août 2007 à 14:13
3
Merci
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 ?

Merci malalam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de malalam
kishkaya 366 Messages postés samedi 26 juin 2004Date d'inscription 17 avril 2008 Dernière intervention - 22 août 2007 à 15:00
0
Merci
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.

_Marikou
Commenter la réponse de kishkaya
kishkaya 366 Messages postés samedi 26 juin 2004Date d'inscription 17 avril 2008 Dernière intervention - 22 août 2007 à 16:34
0
Merci
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
Commenter la réponse de kishkaya
kishkaya 366 Messages postés samedi 26 juin 2004Date d'inscription 17 avril 2008 Dernière intervention - 22 août 2007 à 16:37
0
Merci
A titre d'exemple voila comment on fait avec curl pour envoyer un fichier via FTP:

$tosend = fopen('monfichieraenvoyé.wav',r);
$easyhandle = curl_init('ftp://xxx.xxx.xxx.xxx/fichierupload.wav');
curl_setopt($easyhandle, CURLOPT_INFILE, $tosend);
curl_setopt($easyhandle, CURLOPT_UPLOAD, TRUE);
curl_setopt($easyhandle, CURLOPT_TRANSFERTEXT, FALSE);
if (!curl_exec($easyhandle)) { echo 'error'; };
curl_close ($easyhandle);
fclose($tosend);

et pour en telecharger un :
$toget = fopen('fichiertelecharge.wav','w');
$easyhandle=curl_init('ftp://xxx.xxx.xxx.xxx/sondistant.wav');
curl_setopt($easyhandle, CURLOPT_FILE, $toget);
curl_setopt($easyhandle, CURLOPT_UPLOAD, FALSE);
curl_setopt($easyhandle, CURLOPT_TRANSFERTEXT, FALSE);
curl_setopt($easyhandle, CURLOPT_HEADER, 0);
if (!curl_exec($easyhandle)) { echo 'error'; };

curl_close ($easyhandle);

fclose($tosend

_Marikou
Commenter la réponse de kishkaya

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.