(finalement pas résolu) Fonction de listage

Fonction de listage (finalement pas résolu) - PHP - Programmation

Marsh Posté le 18-06-2008 à 19:50:50    

Voilà un petit script des plus bidons, pour me permettre de lister des dossiers de manière récursive :
 

Code :
  1. function list_dir($name) {
  2.   if ($dir = opendir($name)) {
  3.     while($file = readdir($dir)) {
  4. echo $file.'<br/>';
  5.       if(is_dir($file) && $file!='.' && $file!='..') {
  6. list_dir($file);
  7.       }
  8.     }
  9.     closedir($dir);
  10.   }
  11. }
  12. list_dir('.');


 
Donc ça, ça marche nickel... dans un seul sens. Lorsque j'indique comme répertoire à explorer '..' ou 'C:' il me liste bel et bien les dossiers et les fichiers, mais n'explore plus les sous-dossiers. Quelque chose que j'ignorerai ?
 
Après test il semblerait que les dossiers ne sont pas reconnus comme tel...
 
Edit : bon c'est résolu à l'arrache avec un chdir... ce qui n'est quand même pas très satisfaisant.
Edit2 : en fait rien n'est réglé il semble y avoir un problème de profondeur. Le premier niveau de sous dossier est lu correctement, mais ensuite les sous dossiers suivants dans l'arborescence...ne sont pas reconnus comme étant des dossiers :/

Message cité 1 fois
Message édité par Elmoricq le 19-06-2008 à 10:21:19

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 18-06-2008 à 19:50:50   

Reply

Marsh Posté le 18-06-2008 à 22:30:39    

Salut,
Je tombe sur ton post, vite fait, une idée : tu ne devrais pas plutot faire  

Code :
  1. if(is_dir($file) && $file!='.' && $file!='..') {
  2.      list_dir($name."\".$file);
  3. }


?
 
Olif.


---------------
LE paintball en plein air à 45Min de Lille
Reply

Marsh Posté le 18-06-2008 à 23:29:24    

Olif_C a écrit :

Salut,
Je tombe sur ton post, vite fait, une idée : tu ne devrais pas plutot faire

Code :
  1. if(is_dir($file) && $file!='.' && $file!='..') {
  2.      list_dir($name."\".$file);
  3. }


?

 

Olif.

 

Ca n'expliquerait pas vraiment pourquoi ça marche pour les premiers sous dossiers et pas pour l'arborescence plus lointaine :/ Je vais tester mais j'en doute (j'ai testé la même chose avec un chdir...sans succès).

 

Edit : je confirme ça ne change rien du tout.


Message édité par Yagmoth le 18-06-2008 à 23:45:14

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 19-06-2008 à 00:28:52    

Que donne la ligne 2 lors d'un sous-répertoire, sors du if pour voir les erreurs éventuelles ;)
Sinon scandir te retourne un tableau contenant tout le répertoire :)

Reply

Marsh Posté le 19-06-2008 à 02:38:14    

Yagmoth a écrit :

Voilà un petit script des plus bidons, pour me permettre de lister des dossiers de manière récursive :

 
Code :
  1. function list_dir($name) {
  2.   if ($dir = opendir($name)) {
  3.     while($file = readdir($dir)) {
  4. echo $file.'<br/>';
  5.       if(is_dir($file) && $file!='.' && $file!='..') {
  6. list_dir($file);
  7.       }
  8.     }
  9.     closedir($dir);
  10.   }
  11. }
  12. list_dir('.');
 

Donc ça, ça marche nickel... dans un seul sens. Lorsque j'indique comme répertoire à explorer '..' ou 'C:' il me liste bel et bien les dossiers et les fichiers, mais n'explore plus les sous-dossiers. Quelque chose que j'ignorerai ?

 

Après test il semblerait que les dossiers ne sont pas reconnus comme tel...

 

Edit : bon c'est résolu à l'arrache avec un chdir... ce qui n'est quand même pas très satisfaisant.
Edit2 : en fait rien n'est réglé il semble y avoir un problème de profondeur. Le premier niveau de sous dossier est lu correctement, mais ensuite les sous dossiers suivants dans l'arborescence...ne sont pas reconnus comme étant des dossiers :/

 

readdir() retourne une liste de fichiers sans chemins. Donc comme tu fais, ça marche quand tu visites le répertoire courant mais pas ailleurs.

 

Donc Olif_c avait raison, sauf que ce serait plutot :

 
Code :
  1. if(is_dir($name."\".$file) && $file!='.' && $file!='..') {
  2.          list_dir($name."\".$file);
  3.    }


(a priori)


Message édité par theredled le 19-06-2008 à 02:40:05

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 19-06-2008 à 05:07:46    

J'ai trouvé sur HFR un vieux post sur le même sujet. La solution était celle-ci en fait :

 
Code :
  1. function list_dir($name) {
  2.   if ($dir = opendir($name)) {
  3.    while(($file = readdir($dir)) !== false) {
  4.   echo $file.'<br/>';
  5.       if($file!='.' && $file!='..') {
  6.   $path= $name.'/'.$file;
  7.   if(is_dir($path)) {
  8. list_dir($path);}
  9. }
  10.    }
  11. closedir($dir);
  12. }
  13. }
 

En gros le problème venait de la boucle while.


Message édité par Yagmoth le 19-06-2008 à 05:09:06

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 19-06-2008 à 10:15:19    

j'en doute, url :o
 
ça marche surtout parce qu'il fait que qu'on t'a nous-mm dit ($name.'/'.$file) :o


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 19-06-2008 à 12:29:49    

theredled a écrit :

j'en doute, url :o
 
ça marche surtout parce qu'il fait que qu'on t'a nous-mm dit ($name.'/'.$file) :o


 
Bah non puisque j'avais testé ce que vous m'avez dis de faire, et que ça ne fonctionnait pas :D En fait ce sont les deux qui devaient être fait, parce que j'ai du rencontrer des exceptions dès qu'un nom de dossier commençait par 0.


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 19-06-2008 à 14:05:07    

url quand même :o

 

en fait c'est quand tu enlèves le "!== false" que ça marche plus ?


Message édité par theredled le 19-06-2008 à 14:05:55

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed