Transférer x fichiers dans un dossier distant

Eléphanteau du PHP | 30 Messages

14 avr. 2012, 17:55

Bonjour,

Je dois transférer les fichiers se trouvant dans le dossier local "Retour" dans un dossier sur un FTP distant qui s’appelle "Traites".
Au passage, je dois ajouter au nom du fichier un "T" avant le nom actuel.
Et je dois supprimer les fichiers du dossier local "Retour" dès qu'ils sont dans le dossier distant "Traites".

Voici mon script - qui pour le moment ne fait rien :-(
.... et je ne vois pas trop où est mon erreur.....

<?php
$ftp_user = ("user");
$ftp_pass = ("pass");
$ftp_host = ("IP");

// TRAITEMENT DES FICHIERS SUR SERVEUR LOCAL
if($dossier = opendir('Retour'))
{
while(false !== ($fichier = readdir($dossier)))
{
if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
{
$file = $fichier; //le fichier local.
$remote_file = "./Traites/T'.$fichier.'"; //Le chemin vers le fichier distant.

///// Connexion au serveur distant
$ftp_server = $ftp_host;
// Mise en place d'une connexion
$conn_id = ftp_connect($ftp_server) or die("Impossible de se connecter au serveur $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);

// Charge un fichier
ftp_put($conn_id, $remote_file, $file, FTP_ASCII);
// Supprime le fichier local
unlink($file);
} // fin du if
} // fin du while
closedir($dossier);
// Fermeture de la connexion
ftp_close($conn_id);
} // fin du if
else
echo 'Le dossier n\' a pas pu être ouvert';
?>

ViPHP
ViPHP | 2287 Messages

15 avr. 2012, 19:28

Bonjour,

Tu peux commencer par mettre des echo de déboguage partout pour voir où passe ton script dans son éxécution (ainsi que les valeurs des variables au cours du temps). Ainsi tu verras mieux là où ça coince.
<?php
echo "debug 1 : ".$ma_variable;
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 30 Messages

16 avr. 2012, 10:01

Ok, merci pour cette piste.

Je mets cela en place, test, et vous fait un feedback ;-)

ViPHP
ViPHP | 2577 Messages

16 avr. 2012, 11:55

Bonjour,

ftp_put retourne vrai si tout se passe bien
if  (ftp_put($conn_id, $remote_file, $file, FTP_ASCII))
{
   echo 'transfert OK';
}
else
{
   echo 'transfert KO';
} 
Il faudrait aussi que tu fasses une connexion avec un client ftp pour voir ou tu arrives à la connexion. Il n'y a peut être pas de répertoire ./Traites tout simplement.

Eléphanteau du PHP | 30 Messages

16 avr. 2012, 16:25

Merci pour ces informations!

J'ai fait des tests, sans succès....

Je vous mets ci-dessous le script de test qui est un peu modifié, vu que j'ai repris le tout à sa base.....
Les résultats sont les suivants:
debug 1 : RCH004120120404151946.csv
debug 2 : TRCH004120120404151946.csv
array(0) { }
Il y a eu un problème lors du chargement du fichier RCH004120120404151946.csv

Pour moi, les debug 1 et 2 sont OK!
Le array(0) est aussi correct, vu que le dossier "Traites" ne comprend pas de fichier.
(J'avais essayé de lire le dossier "Retour" qui a des fichiers et il me les affiche bien)
Donc c'est vraiment le ftp_put qui me pose problème :evil:

// TRAITEMENT DES FICHIERS SUR SERVEUR LOCAL
if($dossier = opendir('Retour'))
{
while(false !== ($fichier = readdir($dossier)))
{
if($fichier != '.' && $fichier != '..' && $fichier != 'index.php')
{
$file = $fichier; //le fichier local.
echo "<br>debug 1 : ".$file;
//$remote_file = "./Traites/T'.$fichier.'"; //Le chemin vers le fichier distant.
//$remote_file = "Traites/T$fichier"; //Le chemin vers le fichier distant.
//$remote_file = "/Traites/T$fichier"; //Le chemin vers le fichier distant.
$remote_file = "T$fichier"; //Le chemin vers le fichier distant.
echo "<br>debug 2 : ".$remote_file;

///// Connexion au serveur distant
$ftp_server = $ftp_host;

// Mise en place d'une connexion
$conn_id = ftp_connect($ftp_server) or die("Impossible de se connecter au serveur $ftp_server");

// Identification avec un nom d'utilisateur et un mot de passe
$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass) or die("Login faux $conn_id");

// Récupération du contenu d'un dossier
//$contents = ftp_nlist($conn_id, "./Retour");
$contents = ftp_nlist($conn_id, "./Traites");

// Affichage de $contents
var_dump($contents);

// Charge un fichier
//if (ftp_put($conn_id, "./Traites/$remote_file", $file, FTP_ASCII))
//if (ftp_put($conn_id, "/Traites/$remote_file", $file, FTP_ASCII))
//if (ftp_put($conn_id, "/$remote_file", $file, FTP_ASCII))
if (ftp_put($conn_id, "./$remote_file", $file, FTP_ASCII))
{
echo "<br>Le fichier $file a été chargé avec succès\n<br>";
} else {
echo "<br>Il y a eu un problème lors du chargement du fichier $file\n<br>";
}

// Fermeture de la connexion
ftp_close($conn_id);


} // fin du if

} // fin du while

closedir($dossier);

// Fermeture de la connexion
ftp_close($conn_id);

} // fin du if