#1 Le 31/01/2010, à 20:55
- MiNiShOoTeR
[PHP] Lister des fichiers de façon récursive
Bonsoir à tous,
je suis en train de développer une petite fonction en PHP qui permet de lister les fichiers/dossier de façon récursive. Voici donc ce que j'ai :
function listeDossier($dossier) // Fonction qui liste un dossier de façon récursive
{
if (is_dir($dossier))
{
if($dossierOuvert=opendir($dossier))
{
while(($fichier=readdir($dossierOuvert))!== false)
{
if ($fichier==".." || $fichier=="." || $fichier=="index.php" || $fichier=="edit.php") // Je veux pas afficher ça
{
continue;
}
else
{
echo "<ul>";
if(is_dir($fichier)) // PROBLEME 1
{
echo "<li>$fichier</li>";
listeDossier($fichier);
}
else
{
echo "<li><a href='edit.php?fichier=$fichier'>$fichier</a></li>"; // PROBLEME 2
}
echo "</ul>";
}
}
}
}
else
{
echo "Erreur, le paramètre précisé dans la fonction n'est pas un dossier!";
}
}
J'ai balisé par des commentaires les deux soucis que je rencontre.
Le 1er, la récursivité marche, mais seulement sur un niveau alors que je voudrais que ça liste jusqu'à ce qu'il n'y ai plus aucun dossier (comme ls -R quoi!)
Le 2nd, c'est qu'il faudrait que mon lien soit relatif à partir du dossier où je suis (logique...) alors que là, il n'y a que le nom du fichier, donc si il est dans un autre dossier que le fichier edit.php, ben ça marchera pas...
Merci d'avance pour votre aide!
Dernière modification par MiNiShOoTeR (Le 31/01/2010, à 23:01)
Hors ligne
#2 Le 31/01/2010, à 21:16
- obiwankennedy
Re : [PHP] Lister des fichiers de façon récursive
Déjà, je pense que tes balises "ul" sont mal placées. il faut les mettre en dehors du while.
pb 1:
listeDossier($dossier/$fichier);
pb2 :
echo "<li><a href='edit.php?fichier=dossier/$fichier'>$fichier</a></li>"; // PROBLEME 2
Un truc comme ça je dirais.
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#3 Le 31/01/2010, à 21:29
- MiNiShOoTeR
Re : [PHP] Lister des fichiers de façon récursive
Déjà, je pense que tes balises "ul" sont mal placées. il faut les mettre en dehors du while.
Effectivement, tu as raison, c'est corrigé!
pb 1:
listeDossier($dossier/$fichier);
Je vois pas exactement ce que ça changerait?!
J'ai du mal à comprendre le problème là, car je rappelle la fonction à chaque fois, donc dès qu'il y a encore des dossiers, ça devrait rappeler encore et encore la fonction...
EDIT : En fait, c'est ok, ça marche très bien! Merci
pb2 :
echo "<li><a href='edit.php?fichier=$dossier/$fichier'>$fichier</a></li>"; // PROBLEME 2Un truc comme ça je dirais.
Ça c'est ok, merci!
Si quelqu'un passe par là et est intéressé, voilà la fonction qui marche :
function listeDossier($dossier) // Fonction qui liste un dossier de façon récursive
{
if (is_dir($dossier))
{
if($dossierOuvert=opendir($dossier))
{
echo "<ul>";
while(($fichier=readdir($dossierOuvert))!== false)
{
if ($fichier==".." || $fichier=="." || $fichier=="index.php")
{
continue;
}
else
{
if(is_dir("$dossier/$fichier"))
{
echo "<li>$fichier</li>";
listeDossier("$dossier/$fichier");
}
else
{
echo "<li><a href='edit.php?fichier=$dossier/$fichier'>$fichier</a></li>";
}
}
}
echo "</ul>";
}
}
else
{
echo "Erreur, le paramètre précisé dans la fonction n'est pas un dossier!";
}
}
Dernière modification par MiNiShOoTeR (Le 31/01/2010, à 21:34)
Hors ligne
#4 Le 31/01/2010, à 22:00
- MiNiShOoTeR
Re : [PHP] Lister des fichiers de façon récursive
Je me permet de remonter le topic, pour une petite question supplémentaire...
C'est possible de contrôler l'ordre d'affichage des dossier/fichiers?
J'aimerais que les dossiers soient affichés après les fichiers pour un meilleur repérage visuel.
Dernière modification par MiNiShOoTeR (Le 31/01/2010, à 22:05)
Hors ligne
#5 Le 01/02/2010, à 10:48
- obiwankennedy
Re : [PHP] Lister des fichiers de façon récursive
C'est possible mais ça t'oblige à faire deux boucles. La première tu affiches les dossiers et tu stockes les infos pour les fichiers, et la deuxième tu affiches les infos des fichiers.
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne