Fonction récursive pour générer une arborescence de fichiers avec filtres

Soyez le premier à donner votre avis sur cette source.

Vue 18 991 fois - Téléchargée 864 fois

Description

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 / Exemple :


<?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 !
@+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

zugolin
Messages postés
14
Date d'inscription
dimanche 24 juin 2007
Statut
Membre
Dernière intervention
2 mars 2009

... un an et quelques plus tard .... ben, pareil que cerede, ça dépasse pas la profondeur 1
cerede2000
Messages postés
71
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
6 septembre 2013

Eu ton script il a un soucis, il ne va pas plus loin qu'un profondeur 1....
cs_caviar
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
lol ... ben moi non plus figure toi... ça faisait partie d'une des source qui m'ont servi à commencer ce code :) lol
++
cs_bobabar
Messages postés
12
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
8 avril 2013

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+
cs_caviar
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
yes ;) merci je l'ajoute dès que j'ai un peu de temps ^^
8/10 -> cool ...lol
@+
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.