Lister le contenu de répertoires quelque soit leurs parenté

Petit nouveau ! | 1 Messages

29 avr. 2011, 18:11

Bonjour,

Je suis en train de lister les fontes qui sont dans un répertoire fonts/ sur une page.
Jusque là pas de problème, je doute que je fasse cela très proprement mais ça marche.

Certaines fontes seront dans des répertoires tels que fonts/Inconsolata/. J'aimerai lister ces fontes comme si elles étaient directement dans fonts/ ainsi je conserve une organisation de répertoires claire, mais ma liste de fonte n'en tiendra pas compte.
Est-ce possible ?

Voici mon code actuel :

<?php
$myDirectory = opendir("fonts");
$demoText =("Voyez ce jeu exquis wallon");
while($entryName = readdir($myDirectory)) {
	$dirArray[] = $entryName;
}
// close directory
closedir($myDirectory);
$indexCount	= count($dirArray);
sort($dirArray);

print("<ul id=\"fontlist\">");
for($index=0; $index < $indexCount; $index++) {
        if (substr("$dirArray[$index]", 0, 1) != "."){ 
		print('<li><textarea class="fontfile c');
		print($index);
		print('">');
		print($dirArray[$index]);
		print('</textarea>');
		print('<a class="info" href="fonts/');
		print($dirArray[$index]);
		print('">Download ');
		print($dirArray[$index]);
		print('</a>');		
	} 
}
print("</ul>");
?>



Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

30 avr. 2011, 09:46

C'est possible, il te faut pour cela passer par une fonction récursive, c'est à dire une fonction qui va s'appeler elle même.

En gros, l'idée est d'écrire une fonction qui liste tous les éléments de ton répertoire font (jusque là, tu sembles savoir faire :)). Pour chaque élément trouvé, tu dois vérifier s'il s'agit d'un fichier ou d'un dossier (avec is_dir() par exemple). Si c'est un fichier, tu l'ajoutes à ton tableau, si c'est un répertoire, tu fais de nouveau appel à ta fonction pour qu'elle recommence sur ce nouveau dossier.

Ta fonction n'a plus ensuite qu'à retourner le tableau contenant tous tes fichiers font :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...