Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2516 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Arborescence récursive

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Arborescence récursive

n°1496900
stealth35
Posté le 29-12-2006 à 02:29:46  profilanswer
 

Bonjour, je voudrais creer un fichier XML qui lit toute l'arborescence d'un dossier (pour mon cas le root de mon espace web(sauf pour l'exemple)), or mon code ne va pas plus loin qu'un seul dossier  :( je comprend pas, dites moi ou ca cloche
 
vous pouvez le tester ici

Code :
  1. <?php
  2. header ("Content-type: text/xml" );
  3. echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
  4. echo "<dir name='root'>\n";
  5. function list_dir($name) {
  6.  if ($dir = opendir($name)) {
  7.   while($file = readdir($dir)) {
  8.    if ($file != "." && $file != ".." ) {
  9.     if(is_dir($file)) {
  10.      echo "<dir name='$file'>\n";
  11.      list_dir($file);
  12.     }else{
  13.     echo "<file>$file</file>\n";
  14.     }
  15.    }
  16.   }
  17.  }
  18.  echo "</dir>";
  19.  closedir($dir);
  20. }
  21. list_dir("./" );
  22. ?>


 
merci de votre aide  :)


Message édité par stealth35 le 29-12-2006 à 02:30:36
mood
Publicité
Posté le 29-12-2006 à 02:29:46  profilanswer
 

n°1496910
afbilou
pouet your life
Posté le 29-12-2006 à 03:19:20  profilanswer
 

Quand tu appelles ta fonction récursive (ligne 11) il faut que tu l'appelles avec comme argument le bon chemin!
Dans ton exemple : list_dir($name.'/'.$file);

n°1496911
stealth35
Posté le 29-12-2006 à 03:24:21  profilanswer
 

ca change rien puisque le pointeur est deja dans son dossier parent

n°1496912
afbilou
pouet your life
Posté le 29-12-2006 à 03:32:13  profilanswer
 

Y a aucun pointeur la dedans :s
 
Il faut ke tu transmette le chemin aux differentes instances de ta fonction recursive :s
Comment veux tu que ton opendir ouvre ton dossier '/pouet/graou/tartampion' si l'argument passé a list_dir est 'tartampion' :s
Tu dois donc transmettre '/pouet/graou' comme je te l'ai dis

n°1496914
afbilou
pouet your life
Posté le 29-12-2006 à 03:44:56  profilanswer
 

De plus le test de ta boucle readdir est faux !
Comme il est indiqué dans la doc, si tu tombes un jour sur un dossier nommé '0' (zéro) ton test de boucle sera evalué a FAUX et la boucle s'arretera prématurément!
 
Le bon test est donc :
while (($file = readdir($path)) !== false)

n°1497098
stealth35
Posté le 29-12-2006 à 14:43:58  profilanswer
 

merci de ton aide  :) , j'ai compris le probleme, sauf que ca marche toujour pas, dans le dossier 'battle' il y'a juste 2 autre dossier, donc avec la fonction is_dir il devrai dire que c'est des dossiers or il me met des fichiers je comprend pas ?
 
 

Code :
  1. <?php
  2. header ("Content-type: text/xml" );
  3.       echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
  4.      echo "<dir name='root'>\n";
  5.      function list_dir($name) {
  6.  if ($dir = opendir($name)) {
  7.              while(($file = readdir($dir)) !== false) {
  8.               if ($file != "." && $file != ".." ) {
  9.     $file = $name.$file;
  10.     if(is_dir($file)) {
  11.                           echo "<dir name='$file'>\n"; 
  12.      list_dir($file);                                           
  13.     }else{
  14.      echo "<file>$file</file>\n";   
  15.     }   
  16.    }
  17.    }
  18.   }
  19.  echo "</dir>";
  20.  closedir($dir);           
  21. }
  22. list_dir("./" )
  23. ?>


Message édité par stealth35 le 29-12-2006 à 15:07:06
n°1497115
FlorentG
Posté le 29-12-2006 à 15:08:45  profilanswer
 

Et si tu bosses en PHP 5.1, utilises plutôt DirectoryIterator de l'extension SPL

n°1497117
stealth35
Posté le 29-12-2006 à 15:09:26  profilanswer
 

c'est bon ca marche, mais juste un petit probleme de nomage apres, je te remerci de m'avoir eclairer ;)
 
voila le code pour ceux que ca intersse
 

Code :
  1. <?php
  2. header ("Content-type: text/xml" );
  3.       echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
  4.      echo "<dir name='root'>\n";
  5.      function list_dir($name) {
  6.  if ($dir = opendir($name)) {
  7.              while(($file = readdir($dir)) !== false) {
  8.               if ($file != "." && $file != ".." ) {
  9.     $path = $name.'/'.$file;
  10.     if(is_dir($path)) {
  11.                           echo "<dir name='".substr($path, 2)."'>\n"; 
  12.      list_dir($path);                                           
  13.     }else{
  14.      echo "<file>$file</file>\n";   
  15.     }   
  16.    }
  17.    }
  18.   }
  19.  echo "</dir>";
  20.  closedir($dir);           
  21. }
  22. list_dir("./" )
  23. ?>


Message édité par stealth35 le 29-12-2006 à 15:38:24
n°1737281
stealth35
Posté le 26-05-2008 à 15:49:48  profilanswer
 

bon je reviens quelque année plus tard, en gros j'ai besoin de faire un menu dynamique en html, je veux utiliser les listes et avoir un truc du genre

 

Dossier 1 >
      sous dossier 1
      sous dossier 2
Dossier 2
Dossier 3 >
      sous dossier 1 >
              sous sous dossier 1
              sous sous dossier 2
      sous dossier 2
Dossier 4
Dossier 5
.....
...

 


bon la mon code bien sur n'est pas bon, au niveau affichage html ca marche c'est en gros le rendu que je voudrais avoir, je dois pas trop être loin du résultat mais la j'avoue je cale un peu

 
Code :
  1. function list_dir($name) {
  2.  if ($dir = opendir($name)) {
  3.             while(($file = readdir($dir)) !== false) {
  4.              if ($file != "." && $file != ".." ) {
  5.     $path = $name.'/'.$file;
  6.     $m = count(explode("/",$name)) - 1;
  7.     if(is_dir($path)) {
  8.      $n++;
  9.      if($n == "1" ){
  10.       echo "<ul>";
  11.      }
  12.      echo "\r<li>(".$n." ) ".$m." - ".$file;
  13.      list_dir($path);
  14.     }else{
  15.      //echo "-->";   
  16.     }
  17.    }
  18.   }
  19.   $n = 0;
  20.  }
  21.  echo "</li>";
  22.  closedir($dir);
  23. }


Message édité par stealth35 le 26-05-2008 à 17:01:06

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Arborescence récursive

 

Sujets relatifs
Limite du niveau d'arborescence des répertoires archivés récursivement[Résolu] boucle for récursive
Arborescence en ligne[C# / XML] Créer une arborescence XML grâce à l'héritage
arborescence pour site webarborescence en perl
MySQL : Problème de liste récursiveModifier extension fichiers dans arborescence
Affichage arborescenceArborescence
Plus de sujets relatifs à : Arborescence récursive


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)