Ftp_nlist et temps d'exécution

WRInaute occasionnel
Bonjour,

Je souhaite dresser la liste des fichiers d'un répertoire sur un serveur distant avec PHP et ftp_nlist. J'utiilise le code suivant:
Code:
if (ftp_login($connexion_id, $ftp_user, $ftp_pass))
	echo '<p>Accès OK.</p>'."\n";
else
	echo '<p>Accès impossible.</p>'."\n ";

if (ftp_pasv ($connexion_id, true)) echo '<p>Mode PASV activé.</p>'."\n";
echo '<p>Dossier actif: <b>'.ftp_pwd($connexion_id).'</p>'."\n";
$tab_fichiers = ftp_nlist($connexion_id, "mondossier/");
var_dump($tab_fichiers);

Mais tout ce que j'obtiens est
Code:
Accès OK.
Mode PASV activé.
Dossier actif: /
bool(false)

Il faut souligner que le script prenant trop de temps (fatal error: amx execution time exceeded...),j'ai rajouté la commande
Code:
set_time_limit(0);
en tête de script

Que dois-le vérifier ?
 
WRInaute passionné
Je te dirais de tester :
/mondossiers/
Et/ou :
./mondossiers/

Tenter aussi d'avoir l'output de ftp_rawlist pourrait être pas mal pour débuguer un peu le tout.
 
WRInaute occasionnel
Merci Julia41.

J'ai essayé avec les syntaxes
.
/
./mondossier/
/mondossier/
mondossier/
/mondossier
mondossier
Mais c'est le même résultat à chaque fois.
Avec ftp_rawlist, j'obtiens la même chose, également au bout d'une minute de traitement environ (appel depuis wamp)
Avec ftp_raw, j'obitens instantanément
Code:
array(1) { [0]=> string(20) "500 Unknown command." }
D'autre part, pour les tests, j'ai mis en 777 les dossiers mondossier/ et celui qui le contient (point d'accès de l'application tierce qui dépose les fichiers .txt que j'essaie de lire)
 
WRInaute passionné
Je me demande si tu as le bon DIR (directory).
Il ne faut pas oublier que tu fonctionnes en absolue et non pas en relatif.
Est-ce qu'en PHP, dans "mondossier" un :
SCRIPT_FILENAME ou DOCUMENT_ROOT
te donne bien :
/mondossier/ ?
Je ne pense pas, je pense que ce serait plutôt un /home/tonnom/www/mondossier/
Bon, pour le unknown command, bizarre comme FTP (testé à l'instant chez moi ça marche) mais ça peut être bloqué volontairement par l'hébergeur.

Perso, je pense à un problème de dir.
 
WRInaute occasionnel
Mon dossier à lire (mondossier/) est situé là:
/homez.116/transporuv/info***/mondossier/

La connection FTP que j'ai donnée à l'application tierce la fait arriver directement dans
info***/ et elle pose ses fichiers .txt dans mondossier/

Mon script se connecte en FTP avec les mêmes identifiants. J'ai tenter un
Code:
$tab_fichiers = ftp_nlist($connexion_id, "/homez.116/transporuv/info***/");
var_dump($tab_fichiers);

puis un
Code:
$tab_fichiers = ftp_nlist($connexion_id, "/homez.116/transporuv/");
var_dump($tab_fichiers);

Toujours le même résultat: la connexion se fait bien, le mode pasv aussi, mais $tab_fichier est false...
 
WRInaute passionné
Tente ce script
-http://www.dansteph.com/listovh.txt
Voir si ça passe.
Ca utilise raw.

Avec filezilla, normalement tu as les logs serveurs et voir ce qu'il supporte, tu auras peut-être des indications.
Je n'ai pas de FTP OVH pour tester.
 
WRInaute occasionnel
Merci pour ce script. Une fois paramétré, il me répond après une bonne minute de traitement, là encore, alors qu'il n'y a rien (2 dossiers, dont l'un contient une dizaine de fichiers .txt de quelques octets chacun):
Code:
Connexion au serveur OK
Liste des fichiers sur le FTP:
Warning: Invalid argument supplied for foreach() in *** on line 56

Cette ligne est
Code:
$contents = dirlist($conn_id,'.',true);
foreach ($contents as $entry)
{...

On se retrouve un peu avec le même souci: que mettre pour le dossier à explorer ('.') ?

Je vais essayer de voir mes logs sur le serveur où on se connecte.
 
WRInaute passionné
Je trouve ton problème vraiment bizarre.
Peut-être que le FTP OVH a quelques fonctions non disponible, t'aurais pas des logs de connexions filezilla à nous filer ?
 
WRInaute occasionnel
La connexion via un client FTP est OK, avec les identifiants que j'utilise dans mon script. Voici tout de même les logs :
Code:
Connexion à ftp.transport-urgent.com sur le port 21. Tentative 1 de 3...
220-
220-Bienvenue, 
220-
220-       On Vous Héberge ?
220-           
220-Vous êtes connecté sur web571.
220 
USER transporuv-imp
331 Please specify the password.
PASS *****
230 Login successful.
Type de serveur: UNIX (standard)
FEAT
211-Features:
 EPRT
 EPSV
 MDTM
 PASV
 REST STREAM
 SIZE
 TVFS
211 End
PWD
257 "/"
TYPE A
200 Switching to ASCII mode.
PASV
227 Entering Passive Mode (213,186,33,201,137,242)
LIST
150 Here comes the directory listing.
226 Directory send OK.
Transfert de 144 octets en 0,09 secondes (1,51 Ko/s)
Liste terminée en 0,52 secondes

Je pense à un autre problème: connexions simultanées
Peut-être qu'une connexion se ferme mal, et qu'ensuite, il est impossbile de connecter un autre user. Possible ?
Merci pour votre aide.

Xavier.
 
WRInaute passionné
xdeslandes a dit:
Je pense à un autre problème: connexions simultanées
Peut-être qu'une connexion se ferme mal, et qu'ensuite, il est impossbile de connecter un autre user. Possible ?
Merci pour votre aide.

Xavier.
Possible, mais c'est bizarre que tu n'arrives pas à avoir de "dump" de la connexion et de son état (un message d'erreur ou autre).
 
WRInaute occasionnel
Si je passe par une autre méthode:
Code:
$repertoire_import = "ftp://login:mpasse@serveur.com/dossier/";
if (is_dir($repertoire_import))
{
    if ($dh = opendir($repertoire_import))
etc...
J'obtiens un message d'erreur:
Code:
Warning: opendir(ftp://...@serveur.com/dossier/) [function.opendir]: failed to open dir: FTP server reports 425 Failed to establish connection. in /***.php on line 37

Aaaaah: en écrivant ce smots, je reçois juste une réponse de l'hébergeur. On me dit que le module FTP de PHP est inutilisable (voir leur guide: http://guides.ovh.com/PhpEtFtp).
Bon, voici une explication à ces bizarreries. Je vais maintenant voir comment contourner ce probème (upgrade de la formule d'hébergement par exemple).

Je te tiens au courant pour info.
 
WRInaute occasionnel
Le support de lhébergeur me répond
Code:
Vous pouvez utiliser les fonctions classiques php de manipulation de fichiers et non les fonction FTP de php
De quelles fonctions veut-il parler ? de fgets, fread ? Mais fopen ne fonctionne pas, alors je ne vois pas.
 
WRInaute passionné
xdeslandes a dit:
Le support de lhébergeur me répond
Code:
Vous pouvez utiliser les fonctions classiques php de manipulation de fichiers et non les fonction FTP de php
De quelles fonctions veut-il parler ? de fgets, fread ? Mais fopen ne fonctionne pas, alors je ne vois pas.
Si tu as un full accès au serveur FTP distant, je te dirais bien de frauder sur un autre port ;)

Bon, je trouve bizarre qu'ils bloquent ça.
T'as tenté de changer ta version de PHP (ça se fait par .htaccess) en testant les 5.3 et/ou version 6 (juste pour tester)
 
WRInaute occasionnel
Je ne vois pas de quelles fonctions il parle: j'ai essayé avec ftp_connect, ftp_login, etc, ainsi qu'avec readdir, fopen, fgets, etc :(
 
WRInaute occasionnel
Bon, problème résolu: sur les serveurs mutualisés, OVH désactive carrément les fonctions FTP de PHP, par mesure de sécurité.
Plus d'info là:
http://guides.ovh.com/PhpEtFtp
J'ai donc réalisé la même manip, mais sur un serveur privé (RPS par exemple chez OVH) et tout fonctionne nickel. Quel temps perdu...

Merci pour vos contributions. Xavier.
 
Discussions similaires
Haut