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 : 11 789

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 Lecture d'un nom de fichier...2 [ par magicsmacks ] Bonjour, J'avais demandais il y a qq jours ceci : " Bonjour, Je poss&#232;de un dossier sur mon serveur dans lequel lister dossiers uniquements [ par shadow1779 ] Bonjour,il existe dans les codes de nombreux scripts pour lister le contenu d'un dossier, cependant cela liste les fichiers et dossier contenu, je vou CHMOD [ par flaydeer ] Salut, Un peu de mal a suivre sur le chmod, que faut il mettre alors concrètement sur les droits des dossiers et fichiers. Par exempl: j'ai un doss afficher une liste de dossiers et de fichiers sous forme d'arborescence en php [ par boubou2412 ] Bonjour,j'ai un petit probléme concernat l'affichage dans ma page web et j'aimerais bien que vous m'aidez.Bref le probléme quej'ai plusieurs volet et Lister tous les fichiers d'un dossier donné [ par lnp ] Comment faire pour lister tous les fichiers d'un dossier donn&#233; En vue de supprimer les fichiers qui ne sont plus n&#233;cessaire au fonctionneme Lister les fichiers d u ndossier [ par Ze_doctor ] Salut tout le monde, J ai regard&#233; apres une source en php pour ca mais aucune ne fonctionne chez moi :/ j ai reussi en rassembalnt quelques bou 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


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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,390 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é.