Bonjour à tous. Alors voilà, je dois me faire une petite fonction récursive de listage de répertoire, mais évidemment elle fonctionne pas
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
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 :
- 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.
- {
- /* Récupération du répertoire courant à lister, ainsi que du suivant. */
- $i = 0; // Initialisation d'un index.
- if (substr($dir, strlen($dir) - 1, 1) != "/" ) // Vérification du fait que le dernier caractère soit différent d'un '/'
- {
- $dir = $dir . "/"; // Si c'est le cas, rajout d'un '/' à la fin.
- }
- $dir = str_replace("\\", "/", $dir); // Remplace les '\' par '/'
- $dir = str_replace("//","/", $dir); // Remplace les '//' par '/'
- $tableau = explode("/", $dir); // Séparation de $dir par les '/'
- $cur = $tableau[$i++]; // affectation du premier membre dans $cur.
- for ($j = 0; $j < $level && isset($tableau[$i]) && $tableau[$i] != ""; $j++, $i++) // Rajout des membres du tableau en fonction de la variable $level
- {
- $cur = $cur . '/' . $tableau[$i];
- }
- echo "Dossier courrant à lister : $cur<br />";
- if (isset($tableau[$i]) && $tableau[$i] != "" ) // Si il reste encore des éléments dans le tableau
- {
- $next = $tableau[$i]; // On met le nom du prochain dans $next.
- }
- echo "Le sous dossier suivant sera : $next<br />";
- /* Listage du répertoire courrant. */
- if (is_dir($cur)) // Vérification du fait que le dossier à lister soit bien un répertoire.
- {
- if ($handle = opendir($dir)) // Vérification du fait que la fonction opendir s'est bien éxécutée.
- {
- echo "<ul class=\"list_menu\">\n"; // Nouvelle liste car nouveau listage.
- while (($entry = readdir($handle)) !== false) // Tant que la fonction readdir renvoi des entrée de répertoire
- {
- if (is_dir($entry) && $entry != "" && $entry != "." && $entry != ".." ) // Si l'entrée est un répertoire valide et différent de '.' et '..'
- {
- if (isset($next) && $entry == $next) // Si l'entrée est identique à celle contenue dans next.
- {
- echo '<li><a href="index.php?dir=' . $cur . '/' . $entry . '">' . $entry . "</a></li>\n"; // On en affiche un lien
- listrep($dir, $level + 1); // Et on liste le répertoire
- }
- else
- {
- echo '<li><a href="index.php?dir=' . $cur . '/' . $entry . '">' . $entry . "</a></li>\n"; // On en affiche un lien
- }
- }
- }
- echo "</ul>"; // Fin de la liste
- closedir($handle); // Fermeture du dossier
- }
- }
- }
|
Merci à ceux qui jèteront un oeil
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 !