Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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! smile

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

obiwankennedy a écrit :

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é! smile

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! smile Merci

pb2 :
echo "<li><a href='edit.php?fichier=$dossier/$fichier'>$fichier</a></li>"; // PROBLEME 2

Un truc comme ça je dirais.

Ça c'est ok, merci! smile

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