Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRÉATION D'UNE ARBORESCENCE


Information sur la source

Catégorie :Fichier / Disque Classé sous : arborescence, lister, fichiers, dossiers, récursivité Niveau : Débutant Date de création : 07/02/2006 Date de mise à jour : 14/02/2006 00:24:57 Vu : 9 965

Note :
Aucune note

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


Description

Cette fonction permet de lister les fichiers et dossiers contenu dans un dossier et même de lister les sous-dossiers.
En gros il fait toute l'arborescence à partir d'un dossier. Tout cela par récursivité.
J'ai mis un filtre pour ne pas lister certains dossier ou fichier et un autre pour ne pas lister certaines extensions
 

Source

  • <?php
  • function ListFolder($Folder, $SkipFileExts, $SkipObjects) // Fonction pour lister les dossier
  • {
  • $dir = opendir($Folder);
  • while (false !== ($Current = readdir($dir))) // Boucle sur tout ce qu'il y a dans le répertoire
  • {
  • if ($Current !='.' && $Current != '..' && in_array($Current, $SkipObjects)===false)
  • {
  • if(is_dir($Folder.'/'.$Current)) // Si c'est un dossier
  • {
  • echo '<strong style="color: #ff0000;">'.$Current.'</strong><br>';
  • ListFolder($Folder.'/'.$Current, $SkipFileExts, $SkipObjects); // On liste les dossiers contenue dans le dossier (récursivité)
  • }
  • else
  • {
  • $FileExt = strtolower(substr(strrchr($Current ,'.'),1));
  • if (in_array($FileExt, $SkipFileExts)===false) // On regarde si on dois afficher cette extension
  • echo $Current.'<br>';
  • }
  • }
  • }
  • closedir($dir);
  • }
  • ?>
  • <html>
  • <head>
  • <title>Test listage de fichier et dossier par récursivité</title>
  • </head>
  • <body>
  • <?php
  • $Folder = './';
  • $SkipExts = array('txt', 'php', 'db');
  • $SkipObjects = array('UnDossier', 'UnFichier');
  • ListFolder($Folder, $SkipExts, $SkipObjects);
  • ?>
  • </body>
  • </html>
<?php

function ListFolder($Folder, $SkipFileExts, $SkipObjects) // Fonction pour lister les dossier
{
 $dir = opendir($Folder);
 while (false !== ($Current = readdir($dir))) // Boucle sur tout ce qu'il y a dans le répertoire
 {
  if ($Current !='.' && $Current != '..' && in_array($Current, $SkipObjects)===false)
  {
   if(is_dir($Folder.'/'.$Current)) // Si c'est un dossier
   {
    echo '<strong style="color: #ff0000;">'.$Current.'</strong><br>'; 
    ListFolder($Folder.'/'.$Current, $SkipFileExts, $SkipObjects); // On liste les dossiers contenue dans le dossier (récursivité)
   }
   else
   {
    $FileExt = strtolower(substr(strrchr($Current ,'.'),1));
    if (in_array($FileExt, $SkipFileExts)===false) // On regarde si on dois afficher cette extension
     echo $Current.'<br>';
   }
  }
 }
 closedir($dir); 
}

?>

<html>
 <head>
  <title>Test listage de fichier et dossier par récursivité</title>
 </head>
 <body>

  <?php
   $Folder = './';
   $SkipExts = array('txt', 'php', 'db');
   $SkipObjects = array('UnDossier', 'UnFichier');
   ListFolder($Folder, $SkipExts, $SkipObjects);
  ?>	

 </body>
</html>

Conclusion

Pour le listage, je n’ai pas fait de mise en forme. Y'a juste les dossiers en gras et en rouge, les fichiers en noir.
C'est juste pour l'example.
Ce sont mes débuts en PHP, donc n'hésiter pas à m'encourager ou à me critiquer. Le but étant de progresser.
 

Historique

07 février 2006 16:19:21 :
Application de la bonne méthode pour énumérer les dossiers
07 février 2006 17:00:06 :
Simplification et correction
08 février 2006 15:00:22 :
Ajout d'un filtre de listage
08 février 2006 16:29:06 :
Correction de 2,3 trucs
14 février 2006 00:24:58 :
Encore des corrections

Commentaires et avis

signaler à un administrateur
Commentaire de FhX le 07/02/2006 15:52:07

Je m'y met en premier !
D'après la doc de PHP :

/* Ceci est la façon correcte de traverser un dossier. */
   while (false !== ($file = readdir($handle))) {
       echo "$file\n";
   }

   /* Ceci est la MAUVAISE façon de traverser un dossier. */
   while ($file = readdir($handle)) {
       echo "$file\n";
   }

Voila, faut au moins corriger ca !

signaler à un administrateur
Commentaire de Charles Racaud le 07/02/2006 16:23:37

Voilà, c'est modifier.
Mais peux-tu m'expliquer pourquoi elle était mauvaise ?

Et merci pour ton soutient.

signaler à un administrateur
Commentaire de malalam le 07/02/2006 16:34:32 administrateur CS

Hello,

parce que tu peux avoir un fichier qui s'appelle '0', par exemple. Et dans ce cas, ta façon de faire va poser problème : ta boucle va s'arrêter net, car '0' == false. MAIS '0' !== false.

Bon moi, le html alors ;-) :

echo "<B><FONT COLOR=#FF0000>".$CurrentFolder."</FONT></B><br>";
ARGH!

echo '<strong style="color: #ff0000;">',$CurrentFolder,'</strong>br/>';

et encore...vaudrait mieux séparer les styles dans une css. Et utiliser une liste pour liste ça (typiquement, les listes sont faites pour représenter les arborescences!).

Une fonction suffirait, au passage, mais pourquoi comme ça...sauf que tu lis 2 fois chaque répertoire, avec ça : une fois pour afficher les répertoires (et les ouvrir), une fois pour afficher les fichiers.

signaler à un administrateur
Commentaire de Charles Racaud le 07/02/2006 17:04:57

>MALALAM

Halàla, que je suis nul.
Mais bon, merci beaucoup pour toutes tes correction.
Je n’avais pas pensé pour le fichier '0' surtout que pour mes testes j'avais mis de numéros mais pas '0' :(
Sinon, pour les styles, c'était juste vite-fait. Le plus important était la fonction.

signaler à un administrateur
Commentaire de coucou747 le 08/02/2006 13:50:07

salut

if ($Current !="." && $Current != "..")

pour ça, tu dois utiliser un array, pour plusieus raisons : si un jours, tu cré une partie perso, ou t'as pas envi de lister certains fichiers, alors tu vas en ajouter, et mettre 32 ifs, c'est pas joli... et pour ceux qui sont sous windows XP, alors t'as aussi le fichier .thumbs.db à enlever... Bref, tu dois faire un array...

si ta fonction avait permi un tri par extention, ou par type, ou une reconaissance des types, ou bien qu'il avait été OO, il aurait présenté un interet, mais là... désolé, mais des codes comme ça, on peut en trouver plein...

signaler à un administrateur
Commentaire de Charles Racaud le 08/02/2006 15:03:01

Voilà, j'ai rajouté un filtre pour ne pas lister certains fichiers et dossiers et un autre pour ne pas lister certaines extensions.
Voilà, j'espère que comme ca se sera mieux.

Et merci pour tes idées.

signaler à un administrateur
Commentaire de coucou747 le 08/02/2006 15:12:36

mais met '.' et '..' dans $SkipObjects...
ça sert à rien de mettre des ==false... mieux vaut ne rien mettre ou mettre des ===false...
et ne mélange pas les " et les '... tu utilises les deux, alors qu'ici, tu ne devrais utiliser que les '...

signaler à un administrateur
Commentaire de wizad le 13/02/2006 23:44:09

<b><font color=\"#FF0000\">".$CurrentFolder."</font></b><br />

=> MALALAM : les deux méthodes sont correct (même si la version original présentait quelque erreur). Et je ne vois pas l'utilité d'utiliser les styles ici... (sauf si tu es allergique au <font> et au <b>). De plus un navigateur un peu ancien risque de ne pas comprendre ta version.

=> CHARLES : la syntaxe correct est <br /> et non </br>. Et un autre détail "array('txt', 'php', '.db');" pourquoi utilise tu un point ici : ".db" et pas là "txt"? je ne pense pas que cela soit correct. Dans ce cas les fichiers en .db seront quand même affichés.

signaler à un administrateur
Commentaire de Charles Racaud le 14/02/2006 00:37:50

Voilà, c'est encore corriger.
Pour le .db, désolé, c'est moi qui ai pas fait attention, je l'ai rajouté après et j'ai oublié que je ne prenais pas le point en compte dans la fonction.

Pour le reste, je m'enrouille un peu

Apparemment <strong sytle= [...] ></strong> ne marche pas sur les anciens navigateurs.
Mais faut t-il utiliser <font> et <b> que <strong ...> ? (les anciens navigateurs sont de moins en moins utilisé)

Et <br> ca marche, </br> aussi, et ainsi que <br />
On m'a dis d'utiliser <br>, maintenant c'est <br />, quelle est la différence ? Les deux marches pourtant ?

Si quelqu'un peu se prendre un peu de temps pour m'expliquer tout ca, ce serai vachement sympas.
Et désolé de poser des tas de question, mais je débute vraiment dans le monde de l'html, du PHP, et du JavaScript.

Et merci a vous tous pour votre soutient.

signaler à un administrateur
Commentaire de wizad le 14/02/2006 01:09:40

concernant <br> il s'agit de l'ancienne norme d'écriture. la nouvelle est <br />. Concernant <font> <b> <strong> il s'agit de différente recommandation et donc différente méthode de faire la même chose. Aprés tout est histoire d'habitude. Il faut aussi préciser que les différente norme sont faite sous forme de recommandation aux webmasters et ne font pas office de vérité absolue. A chaque norme viens son lot de mécontents, de critiques et d'abération (de progrés aussi je te rassure).

Voila en espérant avoir éclairer ta lanterne.

signaler à un administrateur
Commentaire de wizad le 14/02/2006 01:14:17

Pour plus d'informations je te conseil de visiter ce site : http://www.w3.org => il s'agt de l'organisation chargé de la normalisation du html.

signaler à un administrateur
Commentaire de Charles Racaud le 14/02/2006 11:02:30

Ok, merci je suis éclairé maintenant.
Je vais jeter un coup d'oeil sur le site que tu m’as donné.
Et merci encore.

signaler à un administrateur
Commentaire de malalam le 14/02/2006 11:44:59 administrateur CS

<font> est déprécié. Certes, c'est toujoiurs valable dans les anciennes versions du html.
Comme utiliser register_globals à On en php, ou les short-open tags à On...
Les css n'existent que dans les versions récentes de html, et ne sont donc pas mandatory.
Mais, Wizad, quand avance-t-on ?
Les recommendantions du W3C sont aussi des normes, il ne faut pas l'oublier. Et ces normes ont une raison d'être : l'accessibilité. Et l'accessibilité, c'est quand même la philosophie première du net.

Quant à des navigateurs qui ne comprennent pas une css normale, il faudra que tu m'en cites qui soit encore utilisés actuellement... ;-)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Mettre en ligne une arborescence de dossiers et de fichiers [ par hkpsyco974 ] Bonjour tout le monde, je ne sais pas si mon post est bien placé, désolé si ce n'est pas le cas...Mon problème :L'endroit ou je travaille est un cabin PHP5 -> SPL , tri sur DirectoryIterator [ par stailer ] Bonjour, J'utilise la classe DirectoryIterator pour lister tous les répertoires et fichiers d'un chemin. Grâce à isFile je peux lister uniquement les lister fichiers et sous-dossiers [ par Totofweb ] Bonjourdans un script, j'ai besoin de lister les fichiers d'un dossier et les fichiers des sous-dossiers (niveau 1 seulement, mais si vous avez une so Lister fichier d'un repertoire distant [ par blat ] Bonjour,Je voudrais lister des fichiers d'un repertoire distant. En gros je veux qu'a partir de www.monsite.com/mapage.php je puisse avoir la liste de Lister des fichiers [ par clive2k1 ] Salut! voil&#224; j'ai choper qqpart un script qui permet de lister tout les fichiers d'un repertoire: &lt;?php $repertoire = '**nom/dossier**'; $dir Lister les fichiers d'un répertoire et CHMOD [ par cg46 ] Bonjour,J'esp&#232;re ne pas vous emb&#234;ter avec mes questions.J'ai cherch&#233; un peu partout sans trouver...Voil&#224;, je ne suis pas un pro de Sécurité-fichiers-dossiers [ par stageSAP ] Bonjour,Pour mon site, je protège l'accès aux pages grâce aux variables de sessions et cela marche très bien. Je travaille en local pour l'instant. Su Tri de fichiers par date [ par Clem ] Comment trier dans l'orde du plus nouveau au plus vieux, des dossiers ?J'ai trouvé pour afficher les dossiers :&lt;?$rep=opendir('.');while ($file = r Lister les fichiers, sur plusieurs pages [ par jeremytheboss ] Bonjour,Connaissez-vous le code à mettre pour lister le contenu d'un dossier sur plusieurs pages (dixfichiers par pages)Merci de votre réponse, Jérémy effacer tous les fichiers et dossiers a la racine d un site [ par Teclis01 ] Je crois que tout est dans le titre.Je suis decu de free je ne peux plus acceder a mon ftp je peux seulement acceder a mon site en passant par un navi


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,39 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.