Bonjour,
Je me bats avec un fournisseur dont j'utilise, quand il fonctionne, le serveur FTP.
Je simule une connexion pour lecture du répertoire courant :
et, bien sur, j'obtiens la liste des noms des fichiers présents dans le répertoire courant (racine de cet utilisateur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $handle = ftp_connect($host); ftp_login($handle,$user,$pw) or die('utilisateur non authentifié'); ftp_pasv($handle,true); $liste = ftp_nlist($handle,'/') or die('répertoire non consultable'); ftp_close($handle) or die('fermeture impossible'); echo implode('<br>', $liste).'<br>---------------------------<br>';
Sauf ... que cela ne fonctionne pas toujours chez le Client.
Donc, j'ai décidé de reprendre tout au niveau des commandes FTP pour voir les réponses (impossible avec ftp_xxx, sauf ftp_raw() qui rends un tableau des chaines reçues.
Et pour être certain du résultat, je le teste d'aboird sur un serveur ftp tiers de qualité, où j'ai un petit répertoire. cela ressemble à ceci :
La seule utilité de la commande FEAT est la validation de la gestion des réponses multilignes, utile dans le cas de la commande NLIST.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $handle = ftp_connect($host); function send_cde($cde,$arg=null) { global $handle; echo '<br><br>'.date('d/m:Y H:i:s ').">>> $cde <br>"; $reply = ftp_raw($handle,"$cde".(($arg)?" $arg":'')); echo date('d/m:Y H:i:s ').'<<< '.implode('<br><'.str_repeat(' ', 40),$reply); } send_cde('USER',$user); send_cde('PASS',$pw); send_cde('PASV'); send_cde('FEAT'); send_cde('PASV'); send_cde('NLST'); send_cde('QUIT');
et la surprise désagréable est que j'obtiens ceci :
Où, non seulement la commande NLIST ne rend pas la liste des noms mais elle bloque le système pendant le timeout, et les comman des suivantes (ici quit) font de même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 21/04:2020 15:40:10 >>> USER 21/04:2020 15:40:10 <<< 331 User mcpTest@speedytools.online OK. Password required 21/04:2020 15:40:10 >>> PASS 21/04:2020 15:40:10 <<< 230 OK. Current restricted directory is / 21/04:2020 15:40:10 >>> PASV 21/04:2020 15:40:10 <<< 227 Entering Passive Mode (185,61,153,120,47,32) 21/04:2020 15:40:10 >>> FEAT 21/04:2020 15:40:10 <<< 211-Extensions supported: < EPRT < IDLE ... < SPSV < ESTP < 211 End. 21/04:2020 15:40:10 >>> PASV 21/04:2020 15:40:10 <<< 227 Entering Passive Mode (185,61,153,120,47,88) 21/04:2020 15:40:10 >>> NLST 21/04:2020 15:41:40 <<< 21/04:2020 15:41:40 >>> QUIT 21/04:2020 15:43:10 <<<
J'obtiens le même résultat avec la commande LIST.
J'ai beau relire mes docs dans tous les sens, ftp_raw devrait rendre toutes les lignes émises suite à la commande (ce qu'il fait très bien avec la commande FEAT).
Si quelqu'un à une idée, une piste, un éclairage ou toute autre solution pour ce point, je le remercie par avance.
Merci de m'indiquer mes erreurs et/ou le moyen d'obtenir par ftp_raw la liste des fichiers du répertoire, avec les lignes de réponses qui vont avec (150 ... avant et 226 ...après).
Partager