Ftp_nlist et temps d'exécution

Discussion dans 'Administration d'un site Web' créé par xdeslandes, 29 Mai 2011.

Tags:
  1. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    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 ?
     
  2. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    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.
     
  3. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    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)
     
  4. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    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.
     
  5. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    J'essaie de suite: cela me parait effectivement êtreune bonne piste.
     
  6. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    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...
     
  7. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    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.
     
  8. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    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.
     
  9. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    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 ?
     
  10. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    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.
     
  11. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    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).
     
  12. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    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.
     
  13. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    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.
     
  14. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    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)
     
  15. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    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 :(
     
  16. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    T'aurais un phpinfo accessible ?
     
  17. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    Tu veux phpinfo sur le serveur qui lit, ou sur le serveur où sont les fichiers à lire ?
     
  18. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    Sur le serveur qui execute les fonctions ftp_
     
  19. xdeslandes
    xdeslandes WRInaute occasionnel
    Inscrit:
    29 Décembre 2004
    Messages:
    331
    J'aime reçus:
    0
    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.
     
Chargement...
Similar Threads - Ftp_nlist exécution Forum Date
Comment stopper l'exécution de script ajax Développement d'un site Web ou d'une appli mobile 21 Avril 2019
Exécution requête sur bouton sur une ligne tableau Administration d'un site Web 5 Juillet 2017
Stopper execution $.ajax() après un clic Développement d'un site Web ou d'une appli mobile 5 Mars 2017
exécution programme binaire sur des systèmes d'exploitation Débuter en référencement 5 Novembre 2014
"max execution time" et hébergement mutualisé Administration d'un site Web 19 Février 2014
MySQL différence d'exécution Développement d'un site Web ou d'une appli mobile 15 Janvier 2013
Optimiser l'éxécution du JS Développement d'un site Web ou d'une appli mobile 21 Août 2012
Demande de conseils sur execution Java Script Demandes d'avis et de conseils sur vos sites 13 Avril 2012
Temps d'éxécution requête mysql vraiment contre intuitif Développement d'un site Web ou d'une appli mobile 9 Novembre 2011
Execution de code HTML brute Administration d'un site Web 13 Juin 2011