OVH Cloud OVH Cloud

Probleme avec ftp_put

9 réponses
Avatar
destroyedlolo
Salut a tous,

j'ai fait un script PHP qui me permet de mettre a jour automatiquement
mon site web par ftp.

La connexion se passe bien, j'arrive sans probleme a changer de
repertoire sur ma cible ...
Par contre, la fonction ftp_put() echoue systematiquement sans ne
m'afficher aucune erreur ni aucun warning !

Ce n'est pas un probleme de droits. Ma machine est une UltraSparc sous
Solaris8 avec PHP 4.3.8 et ma cible une Sparc classic sous NetBSD 1.6
Les deux machines sont sur le meme reseau et un ftp classique fonctionne
sans probleme.

Bref, je tourne en rond et toute idee sera la bienvenu

A+

Lolo

--
Amiga, UNIX Le tout avec pleins de fautes d'orthographe ...
Sharp, NetBSD http://go.to/destroyedlolo
Apache, PHP http://destroyedlolo.homeunix.org:8080/
Vacances, Voyages 100 % dictionnary free - 1 mispelling by word

9 réponses

Avatar
loufoque
destroyedlolo a dit le 08/09/2004 09:20:
La connexion se passe bien, j'arrive sans probleme a changer de
repertoire sur ma cible ...
Par contre, la fonction ftp_put() echoue systematiquement sans ne
m'afficher aucune erreur ni aucun warning !


Pourrais-tu donner un bout du code pour qu'on puisse vérifier qu'il n'y
ait pas d'erreur ?


Ma machine est une UltraSparc sous
Solaris8 avec PHP 4.3.8 et ma cible une Sparc classic sous NetBSD 1.6


Je vois que monsieur aime les architectures bien conçues...

Avatar
destroyedlolo
loufoque wrote:
destroyedlolo a dit le 08/09/2004 09:20:

La connexion se passe bien, j'arrive sans probleme a changer de
repertoire sur ma cible ...
Par contre, la fonction ftp_put() echoue systematiquement sans ne
m'afficher aucune erreur ni aucun warning !



Je voudrais juste rajoute que mon php.ini contient
error_reporting = E_ALL
mais que le ftp_put() ne m'affiche toujours aucun message :-(

Pourrais-tu donner un bout du code pour qu'on puisse vérifier qu'il n'y
ait pas d'erreur ?


#!/usr/local/bin/php
<?php
/****
* Parametres de connection
****/
// Pour RA
$usr = 'le_user';
$pwd = 'le_passwd';
$srv = 'ra.chez.moi';
$sroot = '/web';

/****
* Ouverture du FTP
****/
$con = ftp_connect($srv) or die(1);
ftp_login($con, $usr, $pwd) or die(1);
ftp_chdir($con, $sroot) or die(1);

echo '*D* Le repertoire courant est :', $home = ftp_pwd($con), "n";

/****
* Ouverture du fichier de parametrage et lecture de son contenue
****/
$f = fopen( $_SERVER['argv'][1], 'r') or die(1);
for(;;){
$l = fgets($f);
if(feof($f))
break;
list($cmd,$fch) = explode("t", $l);
if($cmd != 'T')
continue;

echo "Fichier $fch";

$dir = dirname($fch);
$ndir = substr_count($dir,'/')+1;

ftp_chdir($con, $dir) or die(1);
chdir($dir) or die(1);

echo ftp_pwd($con),' & ', getcwd(), basename($fch),"n";
ftp_put($con, basename($fch), basename($fch), FTP_BINARY) or
die("*F*pb de putn");

for($i=0; $i<$ndir; $i++){
ftp_cdup($con) or die(1);
chdir('..') or die(1);
}
if($home != ftp_pwd($con)){
echo "*E* Nous ne sommes pas revenu au repertoire d'origine !n";
echo "$home != ", ftp_pwd($con), ' & ', getcwd() ,"n";
die(1);
}
}
fclose($f);

ftp_close($con);
echo "C'est fini !n";
?>


Le fichier de parametre donne qq chose comme :

T galerie/Italie/LacMajeur/Baveno/index.php

(le script doit etre lance depuis la racine du site source).

Et j'obtiens comme resultat :

/export/home/laurent/bin/transftp /export/home/laurent/textes/mdf_site
*D* Le repertoire courant est :/web
Fichier galerie/Italie/LacMajeur/Baveno/index.php
/web/galerie/Italie/LacMajeur/Baveno &
/export/home/Web/Site/galerie/Italie/LacMajeur/Baveno index.php

*F*pb de put

Ma machine est une UltraSparc sous Solaris8 avec PHP 4.3.8 et ma cible
une Sparc classic sous NetBSD 1.6



Je vois que monsieur aime les architectures bien conçues...


Hehe :-)
Y'a aussi de l'HP, du VAX et de l'Amiga sur mon reseau :-)


--
Amiga, UNIX Le tout avec pleins de fautes d'orthographe ...
Sharp, NetBSD http://go.to/destroyedlolo
Apache, PHP http://destroyedlolo.homeunix.org:8080/
Vacances, Voyages 100 % dictionnary free - 1 mispelling by word


Avatar
_nop_nop_quinton_
j'ai fait un script PHP qui me permet de mettre a jour automatiquement
mon site web par ftp.


j'ai l'impression que tu veux faire du mirror en php, il y a cette
classe Pear qui semble le faire pour toi :

http://pear.php.net/manual/en/package.networking.net-ftp.php

il ne te reste plus qu'a la spécialiser selon tes convenances (fichier de
config).


--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To:

Avatar
destroyedlolo
_marc_ wrote:
j'ai fait un script PHP qui me permet de mettre a jour automatiquement
mon site web par ftp.



j'ai l'impression que tu veux faire du mirror en php, il y a cette
classe Pear qui semble le faire pour toi :

http://pear.php.net/manual/en/package.networking.net-ftp.php

il ne te reste plus qu'a la spécialiser selon tes convenances (fichier
de config).


Ben, je ne suis pas sur que ca resolve le probleme car cette classe
"n'est" qu'un enrobage des fonctions ftp_*.




--
Amiga, UNIX Le tout avec pleins de fautes d'orthographe ...
Sharp, NetBSD http://go.to/destroyedlolo
Apache, PHP http://destroyedlolo.homeunix.org:8080/
Vacances, Voyages 100 % dictionnary free - 1 mispelling by word


Avatar
destroyedlolo
Hum, ca sent le bug a plein nez : j'ai mis des traces dans le code et
... la fonction qui correspond a ftp_put n'est jamais appellee ...
QQ'un sait-il dans quel fichier ".c" se trouve le parser ou se trouve le
code qui lance la fonction qui correspond a la commande ?


--
Amiga, UNIX Le tout avec pleins de fautes d'orthographe ...
Sharp, NetBSD http://go.to/destroyedlolo
Apache, PHP http://destroyedlolo.homeunix.org:8080/
Vacances, Voyages 100 % dictionnary free - 1 mispelling by word
Avatar
l_faillie
destroyedlolo wrote in message news:...
Hum, ca sent le bug a plein nez : j'ai mis des traces dans le code et
... la fonction qui correspond a ftp_put n'est jamais appellee ...
QQ'un sait-il dans quel fichier ".c" se trouve le parser ou se trouve le
code qui lance la fonction qui correspond a la commande ?


Bon ben c'est confirme : je n'ai pas reproduit le bug sous HP-UX vers
une autre machine sous HP-UX.

Alors 2 solutions :
- Soit il y a un probleme due a Solaris,
- Soit c'est mon serveur ftp sous NetBSD qui renvoie qq chose que le
PHP ne comprend pas.

Dans tous les cas, il y a un bleme cote PHP car il devrait au moins
afficher une erreur.

A+

Lolo

Avatar
_nop_nop_quinton_
destroyedlolo wrote:

Ben, je ne suis pas sur que ca resolve le probleme car cette classe
"n'est" qu'un enrobage des fonctions ftp_*.


peut-etre, mais ceci fonctionne jusqu'au 'put', mais putRecursive ne passe
pas
a cause du controle de repertoire qui semble buggué quelque soit le type
de repertoire (relatif, .., ) ...

"erreur : putRecursive : Given local-path '... DIR ...' seems not to be a
directory."



<?php

error_reporting(E_ALL);

include_once('pear-init.php');
require_once('Net/FTP.php');

function check_pear_error($action, &$obj, $exit = 'true'){
if(PEAR::isError($obj)){
echo "erreur : $action : " . $obj->getMessage() . "nn";
if($exit)
exit(1);
}
}

function show_ls($dir){
check_pear_error('show-ls', $dir);
foreach($dir as $entry){
printf("%-30s %-5d n", $entry['name'], $entry['size']);
}
}

$host = '...';
$port = '21';
$user = 'mquinton';
$passwd = '...';

$ftp = new Net_FTP();

check_pear_error('coonect', $ftp->connect($host, $port));
check_pear_error('login', $ftp->login($user, $passwd));
check_pear_error('cd', $ftp->cd('./tmp'));

$file = 'net_ftp.php';
check_pear_error('rm', $ftp->rm($file), 'false');
check_pear_error('put', $ftp->put($file, $file));

show_ls( $ftp->ls('.'));

check_pear_error('size', $size = $ftp->size($file));
echo "file : $file : size : $sizen";

$local_dir = '/home/cautra/work/php/pear/DataObjects';
$remote_dir = ' ... a DIR ...';

# bug chez moi !
check_pear_error('putRecursive', $size = $ftp->putRecursive($local_dir,
$remote_dir));

show_ls( $ftp->ls('.'));
show_ls( $ftp->ls($remote_dir));



--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To:

Avatar
destroyedlolo
_marc_ wrote:
destroyedlolo wrote:

Ben, je ne suis pas sur que ca resolve le probleme car cette classe
"n'est" qu'un enrobage des fonctions ftp_*.



peut-etre, mais ceci fonctionne jusqu'au 'put', mais putRecursive ne
passe pas
a cause du controle de repertoire qui semble buggué quelque soit le type
de repertoire (relatif, .., ) ...
[...]


Ok, merci.
Bon, comme je l'ai poste, il semblerait que ce soit encore un pb de
portage sous Solaris :-(
En attendant, j'ai transforme mon script pour qu'il genere directement
des commandes FTP que je joue ensuite avec le client ftp natif de ma
machine ...

Par contre, une autre question pendant que j'y suis : est-ce que l'on
peut passer un chemin pour le "remote file" de ftp_put() ?

J'ai vu pas mal de ftp_put($connexion, "/chemin/fichier",
"repertoire_local/fichier_local, ... ) lors de mes recherche mais la doc
n'indique rien sur le sujet ...

A+

Lolo

--
Amiga, UNIX Le tout avec pleins de fautes d'orthographe ...
Sharp, NetBSD http://go.to/destroyedlolo
Apache, PHP http://destroyedlolo.homeunix.org:8080/
Vacances, Voyages 100 % dictionnary free - 1 mispelling by word


Avatar
DC
Salut à tous,

j'ai récemment fait un test avec un collègue sur les fonctions ftp_* dont
ftp_put, qui ne faisait rien sans message d'erreur.
Après recherche, le problème semblait venir de la configuration du serveur
FTP, en effet il fallait activer le PASV mode.
Dès lors, on à put ecrire dans un fichier du ftp.
Certaines fonctions ne semblaient pas fonctionner, est-ce a cause de WinXP
qui hébergeait le serveur FTP (accès fait à partir d'un win98se)...????
Les répertoires utilisés pour notre test était Anonymous avec tous les
droits disponibles pour le repertoire ftp afin d'être sur de ne pas être
bloqué par les auto.
.... A vérifier...

"destroyedlolo" a écrit dans le message de
news:
Salut a tous,

j'ai fait un script PHP qui me permet de mettre a jour automatiquement
mon site web par ftp.

La connexion se passe bien, j'arrive sans probleme a changer de
repertoire sur ma cible ...
Par contre, la fonction ftp_put() echoue systematiquement sans ne
m'afficher aucune erreur ni aucun warning !

Ce n'est pas un probleme de droits. Ma machine est une UltraSparc sous
Solaris8 avec PHP 4.3.8 et ma cible une Sparc classic sous NetBSD 1.6
Les deux machines sont sur le meme reseau et un ftp classique fonctionne
sans probleme.

Bref, je tourne en rond et toute idee sera la bienvenu

A+

Lolo

--
Amiga, UNIX Le tout avec pleins de fautes d'orthographe ...
Sharp, NetBSD http://go.to/destroyedlolo
Apache, PHP http://destroyedlolo.homeunix.org:8080/
Vacances, Voyages 100 % dictionnary free - 1 mispelling by word