Page 1 sur 1
Récupérer un dossier entier en FTP
Posté : 01 mai 2014, 22:48
par 4lO5AN
Bonsoir,
Je cherche depuis plusieurs heures maintenant quelque chose qui me semble pourtant basique.
En php je souhaite me connecter en ftp et récupérer en local un dossier avec ses sous répertoire et ses fichiers.
J'ai épuisé beaucoup de forum sans résultat. Ma connexion ftp fonctionne et en voici le code :
//récupère mes id de connexion
list ($ftp_server,$port,$ftp_user_name,$ftp_user_pass) = ftpConf();
// Mise en place dune connexion basique
$conn_id = ftp_connect($ftp_server);
// Identification avec un nom dutilisateur et un mot de passe
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// Vérification de la connexion
if ((!$conn_id) || (!$login_result) || (!$mode)) {
echo "La connexion FTP a échoué !";
} else {
echo "Connexion au serveur $ftp_server, pour l'utilisateur $ftp_user_name";
}
Re: Récupérer un dossier entier en FTP
Posté : 01 mai 2014, 23:06
par moogli
salut,
un sujet récent parle aussi de FTP et te fournit des pistes pour faire ce que tu souhaite
php-debutant/lenteurs-scan-ftp-t270993.html
merci d'utiliser le formulaire de recherche du forum
@+
Re: Récupérer un dossier entier en FTP
Posté : 01 mai 2014, 23:22
par 4lO5AN
Merci moogli mais cela ne résous pas mon problème.
Ce code liste seulement les fichiers dans le dossier principal. Mon but étant de copier tous les sous-dossier ainsi que les fichiers à l’intérieur.
Apres cela je pourrais faire ma copie.
Re: Récupérer un dossier entier en FTP
Posté : 02 mai 2014, 00:59
par moogli
et tu ne sais pas faire une fonction récursive ?
la suite ce fait avec
ftp_get
commence par lire le contenu du répertoire distant et après tu pourras faire la copie.
@+
Re: Récupérer un dossier entier en FTP
Posté : 02 mai 2014, 09:40
par 4lO5AN
Oui je comprend ou tu veux en venir avec la récursivité .
Mais qu'est-ce qui me permet de lister des dossiers ?
ftp_nlist me liste seulement les fichiers
ftp_get me 'télécharge' seulement les fichiers
Avec quel méthode parcourir mon dossier global ? Et quelle méthode me permet de vérifier si c'est un dossier ou non ?
Re: Récupérer un dossier entier en FTP
Posté : 02 mai 2014, 10:22
par moogli
is_dir permet de savoir s'il s'agit d'un dossier, et utilisable avec ftp
sinon
ftp_raw_list tu fournira plus de détails mais faut parser le retour (si commecne par un d c'est un répertoire, par l un lien symbolique, - un fichier).
pour la récursivité, c'est a toi de la gérer en fonction de si c'est un répertoire ou pas.
ftp_rawlist gère la chose avec le 3ème paramètre.
@+
Re: Récupérer un dossier entier en FTP
Posté : 02 mai 2014, 12:13
par 4lO5AN
Merci de tes réponses moogli
J'ai fait quelque chose comme cela mais ma page tourne en boucle
// Mise en place d'une connexion basique
$connexion = ftp_connect($ftp_server, $port, 2);
// Authentification & Vérification FTP
if (@ftp_login($connexion, $ftp_user_name, $ftp_user_pass)) {
echo "<div align='right' class='details'>Connecté\n</div>";
// Activation du mode passif
ftp_pasv($connexion, true);
$src = $connexion;
$dst = "test/";
recurse_copy($src,$dst);
// Fermeture de la connexion
ftp_close($connexion);
// Affichage si pas de connexion possible
} else {
echo "<div align='center'><span class='rouge'>Connexion impossible au serveur privé de l'association <strong>WDA</strong>.<br /><br />Veuillez nous en excuser et réessayez SVP ultérieurement.\n</span></div><br />";
}
ftp_close($conn_id);
function recurse_copy($src,$dst) {
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ) {
recurse_copy($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
Re: Récupérer un dossier entier en FTP
Posté : 02 mai 2014, 22:35
par moogli
salut,
vire les @ c'est moche et inutile en dev (et en prod on n'affiche pas les erreurs donc aucun intérêt

.
as tu tenté un débug avec ton ide préféré ?
le but étant d'être certain de ce que fait ta fonction (pas de boucle infinie sur le while, que tu passe bien les donne infos quand tu ré emploi la fonction récusive etc.
opendir prend en paramètre une chaîne de caractère et non une ressource de connexion.
si tu veux indiquer utilisateur et mot de passe avec opendir :
<?php
$dir = opendir('ftp://user:[email protected]');
en debug tu pourras voir ce que contient $dir.
@+
Re: Récupérer un dossier entier en FTP
Posté : 03 mai 2014, 13:54
par 4lO5AN
Merci moogli j'ai pu avancer grâce à toi !
Je mettrais le code complet une fois que tout sera au point !
Re: Récupérer un dossier entier en FTP
Posté : 17 mai 2014, 16:37
par 4lO5AN
Mon sujet est résolue !
Le code de dessus marche parfaitement il s'agissait d'un problème de droit d’accès aux dossiers.
En effet je travaille pour un prestataire et donc je n'ai pas pensez à cela ! Dépité....