begin process at 2012 02 15 23:55:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :15 990 / 738

Auteur : caviar

Ecrire un message privé
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

Les Membres Club peuvent 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

 Sources du même auteur

GÉNÉRATEUR DE LISTE DÉROULANTE
CLASS CALENDRIER AVEC AFFICHAGE D'UN INTERVALE DE JOURS DÉFI...
GOOGLE SEARCH PARSER
CONNAITRE LE NOMBRE DE PAGES INDEXÉES SUR GOOGLE
GÉNÉRATEUR DE CONTENU

 Sources de la même categorie

UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151
TROUVER LES DOUBLONS DANS UNE LISTE DE FICHIERS par soobook

 Sources en rapport avec celle ci

GÉNÉRATION RÉCURSIVE D'UNE ARBORESCENCE DE RÉPERTOIRES par webdeb
Source avec Zip Source avec une capture DORY NAVIGATOR: EXPLORATEUR DE FICHIERS ET DE DOSSIERS par kurt67
Source avec Zip Source avec une capture EXPLORATEUR DE DOSSIERS RÉCURSIF par nikoland
CRÉATION D'UNE ARBORESCENCE par Charles Racaud
LISTER LES FICHIERS D'UN DOSSIER ET EN FAIRE DES LIENS ( MEI... par Evangun

Commentaires et avis

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 ;)
++

Commentaire de caviar le 05/04/2007 17:07:14

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

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 :)

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
++

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

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

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

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

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é ...
++

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+

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

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+

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
++

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....

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 LISTER LES FICHIERS D'UN DOSSIER ET EN FAIRE DES LIENS [ par djimson ] bonsoir, j'ai pris un script pour lister les fichiers d'un dossiers et en faire des liens mais j'ai quelques petits soucis : 01 - Comment faire pour 3 deniers fichiers ajouté... [ par mailys ] Bonjour, J'ai trouver un code me permettant de lister les 3 derniers fichiers ajoutés dans un dossier. Mon problème est que je n'arrive pas à trouver Compter des fichiers [ par leoncap ] Bonjour, j'utilise le script suivant pour compter le nombre de fichiers qu'il y a dans un dossier. Il fonctionne très bien sauf pour 0. Quand le dossi lister contenu des fichiers contenus dans répoertoire et enregistrés dans une table [ par begueradj ] Je repose cette question que j'ai déjà posée mais qui n'a pas reçu de réponse: J'aimerais lister le contenu d'un dossier dont les noms de fichiers so Problème av listeur de répertoire [ par thedjpredator ] Bonjour,J'ai commencé un site un php depuis peu, et j'ai quelques difficultés a comprendre certain code que parfoisj'ai chopé parci parla. Et la donc lister un dossier puis comparer a une bdd [ par jphilippev ] bonjour je cherche a recuperer tout les fichiers contenus dans un dossieret les comparer a la colonne correspondante de ma bddvoila jarrive bien a "ex Protéger un dossier dans un serveur [ par oumelaid ] Bonsoir, J'ai voulu créer un .htacces pour protéger le dossier dans le serveur j'ai crée les deux fichiers(.htaccess/.htpasswd) dans le répertoire lister les dossier et non le contenu [ par zuddap ] bonjour a tous, voila je cherche a lister tous les dossiers qui sont dans un dossier(parrent) ou il y a également des fichiers. Comme il est dit dans


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,730 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales