[Résolu] [PHP] Fonction récursive listage de répertoire

Fonction récursive listage de répertoire [Résolu] [PHP] - PHP - Programmation

Marsh Posté le 11-08-2005 à 14:52:08    

Bonjour à tous. Alors voilà, je dois me faire une petite fonction récursive de listage de répertoire, mais évidemment elle fonctionne pas  :lol:  
 
Pour le moment, je fais les tests en local, je suis sous windows 2000, et la chose se présente comme ceci :
 
Mon arborescence : (non triée par ordre alphabétique, ceux qui terminent par \ sont des répertoires)


C:\Tests\Ressources\
                    test\
                         toto\
         images\
                banniere.png
         icones\
         chips\
               Lays\
         toto\
              test\
         index.php
         func.php
 


 
index.php : la page "standart"
func.php : contient diverses fonctions, notemment la fonction listrep
 
Donc dans la page d'index, si je récupère une variable $_GET['dir'] , je la met dans $to_list et si il n'y en a pas, je met dans $to_list la valeur './Ressources'
 
J'appelle donc ma fonction par listrep($to_list, 0);
 
Et quand il liste le dossier Ressources par défaut, il ne trouve rien  :heink:  
 
Par contre, si je rajoute derrière mon url ?dir=./ il arrive a me lister
Ressources
images
icones
chips
toto
 
(Je ne veux que les répertoires ;))
 
Voilà donc je comprend pas vraiment pourquoi, j'ai pourtant relu plein de fois le code et je ne trouve vraiment pas ce qui lui pose probleme. Je vous laisse la fonction listrep ci-dessous :

Code :
  1. function listrep($dir, $level) // Paramètres : $to_list: Chemin complet à analyser. $num : Variable qui commence à 0 et qui s'auto-incrémente à chaque exploration de sous-dossier.
  2. {
  3. /* Récupération du répertoire courant à lister, ainsi que du suivant. */
  4. $i = 0; // Initialisation d'un index.
  5. if (substr($dir, strlen($dir) - 1, 1) != "/" ) // Vérification du fait que le dernier caractère soit différent d'un '/'
  6. {
  7.  $dir = $dir . "/"; // Si c'est le cas, rajout d'un '/' à la fin.
  8. }
  9. $dir = str_replace("\\", "/", $dir); // Remplace les '\' par '/'
  10. $dir = str_replace("//","/", $dir); // Remplace les '//' par '/'
  11. $tableau = explode("/", $dir); // Séparation de $dir par les '/'
  12. $cur = $tableau[$i++]; // affectation du premier membre dans $cur.
  13. for ($j = 0; $j < $level && isset($tableau[$i]) && $tableau[$i] != ""; $j++, $i++) // Rajout des membres du tableau en fonction de la variable $level
  14. {
  15.  $cur = $cur . '/' . $tableau[$i];
  16. }
  17. echo "Dossier courrant à lister : $cur<br />";
  18. if (isset($tableau[$i]) && $tableau[$i] != "" ) // Si il reste encore des éléments dans le tableau
  19. {
  20.  $next = $tableau[$i]; // On met le nom du prochain dans $next.
  21. }
  22. echo "Le sous dossier suivant sera : $next<br />";
  23. /* Listage du répertoire courrant. */
  24. if (is_dir($cur)) // Vérification du fait que le dossier à lister soit bien un répertoire.
  25. {
  26.  if ($handle = opendir($dir)) // Vérification du fait que la fonction opendir s'est bien éxécutée.
  27.  {
  28.   echo "<ul class=\"list_menu\">\n"; // Nouvelle liste car nouveau listage.
  29.   while (($entry = readdir($handle)) !== false) // Tant que la fonction readdir renvoi des entrée de répertoire
  30.   {
  31.    if (is_dir($entry) && $entry != "" && $entry != "." && $entry != ".." ) // Si l'entrée est un répertoire valide et différent de '.' et '..'
  32.    {
  33.     if (isset($next) && $entry == $next) // Si l'entrée est identique à celle contenue dans next.
  34.     {
  35.      echo '<li><a href="index.php?dir=' . $cur . '/' . $entry . '">' . $entry . "</a></li>\n"; // On en affiche un lien
  36.      listrep($dir, $level + 1); // Et on liste le répertoire
  37.     }
  38.     else
  39.     {
  40.      echo '<li><a href="index.php?dir=' . $cur . '/' . $entry . '">' . $entry . "</a></li>\n"; // On en affiche un lien
  41.     }
  42.    }
  43.   }
  44.   echo "</ul>"; // Fin de la liste
  45.   closedir($handle); // Fermeture du dossier
  46.  }
  47. }
  48. }


 
Merci à ceux qui jèteront un oeil  :jap:  
 
Je trouve tellement pas la solution que je me demande si c'est les tests en local qui foirent...


Message édité par Tirkyth le 12-08-2005 à 15:40:34

---------------
Mon Feedback !
Reply

Marsh Posté le 11-08-2005 à 14:52:08   

Reply

Marsh Posté le 11-08-2005 à 16:25:13    

Salut,
 
Et quand tu execute ca t'affiche koi?

Reply

Marsh Posté le 11-08-2005 à 16:43:45    

Bin comme j'ai dit, avec le repertoire de base il affiche rien. Si je lui met index.php?dir=./ il va bien lister par contre. Tous les autres répertoires ca liste pas.


---------------
Mon Feedback !
Reply

Marsh Posté le 11-08-2005 à 16:47:51    

Oui d'accords mais est-ce qu'il t'affiche les textes qui sont présents dans ton script php? au moins(     echo "Dossier courrant à lister : $cur<br />";  par exemple) ? où y'as t'il un mess d'erreur?

Reply

Marsh Posté le 11-08-2005 à 16:49:36    

ah oui ca ca s'affiche correctement


---------------
Mon Feedback !
Reply

Marsh Posté le 12-08-2005 à 15:40:14    

Bon je l'ai recommencée ce matin, elle est maintenant fonctionnelle.
 
Merci quand même :jap:


---------------
Mon Feedback !
Reply

Sujets relatifs:

Leave a Replay

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