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 !

FONCTION RÉCURSIVE POUR GÉNÉRER UNE ARBORESCENCE DE FICHIERS AVEC FILTRES


Information sur la source

Catégorie :Fichier / Disque Classé sous : lister, listing, dossier, arborescence, fichiers Niveau : Débutant Date de création : 05/04/2007 Date de mise à jour : 05/04/2007 17:06:20 Vu / téléchargé: 9 569 / 549

Note :
4,5 / 10 - par 2 personnes
4,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Cliquez pour voir la capture en taille normale
Cette fonction vas générer une arborescence des fichiers & dossiers de manière graphique avec la possibilité d'optimiser par des filtres l'affichage
 

Source

  • <?php
  • /* ************************************************************************ */
  • // function listingDir par Nans Stefanini
  • // http://nans.stefanini.free.fr
  • // Fonction récursive permettant de générer une arborescence de fichiers
  • // avec filtres
  • // $path : chemin du dossier à lister
  • // $ext_interdites : tableau des extensions interdites
  • // $dir_interdits : tableau des noms de dossiers interdits
  • // $file_interdits : tableau des fichiers interdits
  • // $profondeur : nombre de dossier à explorer par rapport à $path
  • // $profdep = 0 : ne pas toucher, valeur de départ
  • /* ************************************************************************ */
  • function listingDir($path, $ext_interdites, $dir_interdits , $file_interdits, $profondeur=9999, $profdep=0 ) {
  • if (is_dir($path)) {
  • if (substr($path, -1, 1) !='/') {
  • $path .= '/';
  • echo $path.'<br>';
  • }
  • }
  • echo 'profdep='.$profdep.'<br />';
  • //on compte le nb de / au lancement
  • if ($profdep == 0) {
  • $profdep= substr_count($path, '/');
  • }
  • if (is_dir($path)) {
  • //on definit le nom du dossier à afficher
  • if (substr($path, -1, 1) =='/') { //si ça finit par un slash on le vire pr avoir le nom du dossier
  • $dirnam = substr($path, 0,(strlen($path)-1)); //on vire le dernier shash
  • } else {
  • $dirnam = substr($path, 0,(strlen($path))); //on garde le nom du dossier comme ça
  • $path.= '/'; //et on ajoute un slash a la fin du path pr avoir d chemins ok
  • }
  • $dirnam = strrchr($dirnam, "/"); // on recup le nom du dernier dossier
  • $dirnam = str_replace (array('/'), array(''), $dirnam); // on vire le 1er shash
  • //echo 'yo='.$dirnam ;
  • //echo '<br />';
  • if(!in_array($dirnam, $dir_interdits)) { //on verrifie que le dossier fait pas partie des interdits
  • echo '<strong><a href="#" onclick="if (document.getElementById(\'level'.$profondeur.$dirnam.'\').style.display!=\'block\') {document.getElementById(\'level'.$profondeur.$dirnam.'\').style.display=\'block\';} else { document.getElementById(\'level'.$profondeur.$dirnam.'\').style.display=\'none\' }">- '.$dirnam.'</a></strong><br /><div id="level'.$profondeur.$dirnam.'" style=" margin-left: 15px; display: none;">'."\n";
  • if ($dh = @opendir($path)) {
  • while (($file = readdir($dh)) !== false) {
  • if (($file != '.') && ($file != '..') && ($file != '...')) {
  • if (is_dir($path . $file)) {
  • if (substr_count($path . $file, '/')-$profdep < $profondeur) {
  • listingDir(($path . $file . '/'), $ext_interdites, $dir_interdits, $file_interdits, $profondeur, $profdep);
  • }
  • } else {
  • //on chope l'extension et le nom du fichier
  • $tabfile = explode('.', $file);
  • $nomfile = $tabfile[0];
  • $extfi = $tabfile[1];
  • if(!in_array($extfi, $ext_interdites) && !in_array($file, $file_interdits)) { //on verif les extensions & fichiers interdits
  • echo '<a href="'.$path . $file.'">'. $file.'</a><br>'."\n";
  • }
  • }
  • }
  • }
  • closedir($dh);
  • echo '</div>'."\n";
  • }
  • }
  • }elseif (is_file($path)) {
  • echo $path.'<br>';
  • }
  • }
  • //ex
  • listingDir('./dossier/', array('txt', 'sql', 'fla'), array('css', 'admin'), array('config.php', 'config.inc.php', 'desabo.html', 'formulaire.html'), 1);
  • ?>
<?php
/* ************************************************************************ */
// function listingDir par Nans Stefanini
// http://nans.stefanini.free.fr
// Fonction récursive permettant de générer une arborescence de fichiers
// avec filtres 
// $path : chemin du dossier à lister
// $ext_interdites : tableau des extensions interdites
// $dir_interdits : tableau des noms de dossiers interdits
// $file_interdits : tableau des fichiers interdits
// $profondeur : nombre de dossier à explorer par rapport à $path 
// $profdep = 0 : ne pas toucher, valeur de départ
/* ************************************************************************ */

function listingDir($path, $ext_interdites, $dir_interdits , $file_interdits, $profondeur=9999, $profdep=0  ) {


if (is_dir($path)) {
if (substr($path, -1, 1) !='/') {
			$path .= '/';
      echo $path.'<br>'; 
			}
}

echo 'profdep='.$profdep.'<br />';
//on compte le nb de / au lancement
if ($profdep == 0) {
  $profdep= substr_count($path, '/');
}

		if (is_dir($path)) {		  
		//on definit le nom du dossier à afficher
		if (substr($path, -1, 1) =='/') { //si ça finit par un slash on le vire pr avoir le nom du dossier
		$dirnam = substr($path, 0,(strlen($path)-1)); //on vire le dernier shash
    } else { 
    $dirnam = substr($path, 0,(strlen($path))); //on garde le nom du dossier comme ça
    $path.= '/'; //et on ajoute un slash a la fin du path pr avoir d chemins ok
    }
    $dirnam = strrchr($dirnam, "/"); // on recup le nom du dernier dossier
		$dirnam = str_replace (array('/'), array(''), $dirnam); // on vire le 1er shash
		//echo 'yo='.$dirnam ;
		//echo '<br />';
		
		if(!in_array($dirnam, $dir_interdits)) { //on verrifie que le dossier fait pas partie des interdits
		
    	echo '<strong><a href="#" onclick="if (document.getElementById(\'level'.$profondeur.$dirnam.'\').style.display!=\'block\') {document.getElementById(\'level'.$profondeur.$dirnam.'\').style.display=\'block\';} else { document.getElementById(\'level'.$profondeur.$dirnam.'\').style.display=\'none\'  }">- '.$dirnam.'</a></strong><br /><div id="level'.$profondeur.$dirnam.'" style=" margin-left: 15px; display: none;">'."\n";
			if ($dh = @opendir($path)) {
				while (($file = readdir($dh)) !== false) {
					if (($file != '.') && ($file != '..') && ($file != '...')) {
						
						if (is_dir($path . $file)) {
						if (substr_count($path . $file, '/')-$profdep < $profondeur) {
              
              
							listingDir(($path . $file . '/'), $ext_interdites, $dir_interdits, $file_interdits, $profondeur, $profdep);
							
							
              }
						}  else  {
						  //on chope l'extension et le nom du fichier
						  $tabfile = explode('.', $file);
				      $nomfile = $tabfile[0];
              $extfi = $tabfile[1];
				      
				      if(!in_array($extfi, $ext_interdites) && !in_array($file, $file_interdits)) {	//on verif les extensions & fichiers interdits	               	      
							   echo '<a href="'.$path . $file.'">'. $file.'</a><br>'."\n";							   
							}
						}
					}
				}
       closedir($dh);
				
				echo '</div>'."\n";
			}
			}
		}elseif (is_file($path)) {
			echo $path.'<br>'; 
		}
		

}

//ex
listingDir('./dossier/', array('txt', 'sql', 'fla'), array('css', 'admin'), array('config.php', 'config.inc.php', 'desabo.html', 'formulaire.html'), 1);

?>

Conclusion

Je cherchais à faire précisément ça. j'ai consulté quelques sources ici qui n'offraient pas assez de possibilités de paramétrage. J'ai donc entrepris d'optimiser tout ça à partir de plusieurs codes existants et de mon petit cerveau ;)
VOili VOilo ... j'espère que ça vous servira !
@+
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   generateur_arbo
    •   admin
      • Nouveau Document texte.txt
      • Nouveau Document Microsoft Word.docTélécharger ce fichier [Réservé aux membres club]10 752 octets
    •   css
    • Nouveau Bannershop GIF Animation.bsd
    • Nouveau Document texte.txt
    •   Nouveaudossier
      • Nouveau Image bitmap.bmp
      • Nouveau Feuille de calcul Microsoft Excel.xlsTélécharger ce fichier [Réservé aux membres club]13 824 octets
    •   Nouveaudossier2
      • Nouveau Document texte.txt
      • Nouveau Archive WinRAR ZIP.zipTélécharger ce fichier [Réservé aux membres club]22 octets
    • config.phpTélécharger ce fichier [Réservé aux membres club]Voir ce fichier58 octets
    • index.phpTélécharger ce fichier [Réservé aux membres club]Voir ce fichier3 898 octets

Télécharger le zip

Historique

05 avril 2007 16:09:03 :
correction d'un petit bug ...
05 avril 2007 17:06:20 :
profondeur OK

Commentaires et avis

signaler à un administrateur
Commentaire de caviar le 05/04/2007 16:11:37

il reste encore de petits bugs au niveau de la gestion de la profondeur mais j'y travaille. Si quelqu'un a une idée pour géré ça mieux ;)
++

signaler à un administrateur
Commentaire de caviar le 05/04/2007 17:07:14

Ayé j'ai géré la profondeur corrctement ! tout devrai marcher ;)
++

signaler à un administrateur
Commentaire de FhX le 05/04/2007 20:27:18

Un peu plus de francais "mieux écrit" dans les commentaires de la source, ca fait pas de mal :)

Je regarderai le code un peu plus tard :)

signaler à un administrateur
Commentaire de caviar le 06/04/2007 09:26:11

bah écoutes on peut pas avoir l'esprit mathématique et litteraire en même temps :'-/
moi j'y arrive pas ... puis on peut pas éditer ses commentaires alors bon ... voila quoi
++

signaler à un administrateur
Commentaire de FhX le 06/04/2007 21:52:26

Nananan, jparlais des commentaires de la source :p

Ceux qui sont après les //

:p

signaler à un administrateur
Commentaire de webdeb le 09/04/2007 22:45:15

J'avais déjà codé une telle fonction :

http://www.phpcs.com/codes/GENERATION-RECURSIVE-ARBORESCENCE-REPERTOIRES_41221.aspx

signaler à un administrateur
Commentaire de FhX le 09/04/2007 23:39:47

A l'heure de PHP5, je dirais bien que pour faire une bonne recursivité, on peut utiliser les itérateurs de la SPL ^^

http://ramikayyali.com/archives/2005/02/25/iterators
par exemple :)

Sinon http://www.php.net/manual/fr/ref.spl.php

signaler à un administrateur
Commentaire de webdeb le 10/04/2007 00:00:46

La fonction mkdir() permet de générer également une arborescence de dossiers sur PHP5

signaler à un administrateur
Commentaire de caviar le 10/04/2007 09:26:09

merci pour les comment :) J'ai encore à apprendre hein ;) ...
je vais regarder tout ça ... mais quand je dis générer c'est juste afficher les dossiers et fichiers ...pas créer des dossiers selon un chemin donné ...
++

signaler à un administrateur
Commentaire de bobabar le 12/04/2007 16:30:06

Bon code. Je met 8/10.
Pour les remarques sur les commentaires dans le code : je trouve qu'ici ils sont tout à fait corrects et ils ont le mérite d'exister !
Par contre la présentation de l'HTML résultant pourrait être légèrement et facilement revue : appel d'une fonction javascript notamment au lieu du code dans le onClick, styles (classes) CSS, etc.. . Sinon, bonne base qu'on peut l'enrichir à souhait.

Un bug dans le cas où il y a plusieurs '.' dans le nom du fichier, à corriger ainsi :

//on chope l'extension et le nom du fichier
$tabfile = explode('.', $file);
//DEBUG OLD BUG $nomfile = $tabfile[0];
//DEBUG OLD BUG $extfi = $tabfile[1];
$extfi = $tabfile[sizeof($tabfile)-1];    // MODIF : correction bug si plusieurs '.' dans le nom du fichier
$nomfile = basename($file, $extfi);     // MODIF : correction bug si plusieurs '.' dans le nom du fichier

Merci pour ce script.
A+

signaler à un administrateur
Commentaire de caviar le 13/04/2007 12:23:10

yes ;) merci je l'ajoute dès que j'ai un peu de temps ^^
8/10 -> cool ...lol
@+

signaler à un administrateur
Commentaire de bobabar le 19/04/2007 11:57:37

Au fait, pourquoi le test :
$file !== '...'
quand tu parcours un répertoire ?

$file !== '.' && $file !== '..'
OK, je vois. Mais '...', je ne sais pas ce que c'est. C'est pour certains autres OS ?

A+

signaler à un administrateur
Commentaire de caviar le 23/04/2007 14:38:27

lol ... ben moi non plus figure toi... ça faisait partie d'une des source qui m'ont servi à commencer ce code :) lol
++

signaler à un administrateur
Commentaire de cerede2000 le 20/05/2007 09:48:28

Eu ton script il a un soucis, il ne va pas plus loin qu'un profondeur 1....

signaler à un administrateur
Commentaire de zugolin le 25/08/2008 13:02:08

... un an et quelques plus tard .... ben, pareil que cerede, ça dépasse pas la profondeur 1

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

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 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 impression de fichiers [ par putch ] bonjour &#224; tous !voila mon soucij'ai un repertoire pdf/ lequel se trouve un certains nombre de fichiers pdf :)je souhaiterai un lien/bouton pour l Problème pour de liens hypertext sur les fichier .lnk [ par kt1 ] Voila je vous explique mon souci.Je dois cr&#233;er un site intranet pour ma bo&#238;te. On va y mettre tout ce qui concerne le Service Qualit&#233;. gestion des fichiers php [ par lucky_girl3 ] bonjour tout le monde!! j'ai un s&#233;rieux pb depui qlq jours&nbsp;&nbsp; ; please help viiiiiiiite!!!!!!!! mon probl&#232;me: je veux parcourir un listage d'un dossier par ordre croissant [ par kishkaya ] Bonjour, alors j'aimerais lister un dossier contenant des .gif nomm&#233; en 001.gif, 002.gif, 003.gif ... et les lister par order croissant : echo " Connaitre le nombre de fichiers dans un dossier [ par tony4758 ] Bonjour, je voudrais savoir si il existe un script permettant de compter le nombre de fichier qui se trouvent dans un repertoire defini, je n'ai pas t 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 recherche par mot dans fichier [ par justone72 ] Bonjour,J'ai besoin assez rapidemnt d'un script qui permet de faire une recherche dans un dossier (recherche de fichiers dans le dossier + sous dossie 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


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



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,38 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é.