begin process at 2012 02 11 16:39:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > PARCOURIR UN RÉPERTOIRE ET SES SOUS SOUS SOUS... RÉPERTOIRE ET RETOURNER LES FICHIERS QUI ONT L'EXTENSION VOULUE

PARCOURIR UN RÉPERTOIRE ET SES SOUS SOUS SOUS... RÉPERTOIRE ET RETOURNER LES FICHIERS QUI ONT L'EXTENSION VOULUE


 Information sur la source

Note :
Aucune note
Catégorie :Fichier / Disque Classé sous :dossier, répertoire, parcourir, extension, fichier Niveau :Débutant Date de création :20/01/2007 Date de mise à jour :27/11/2010 12:55:16 Vu :26 026

Auteur : micmonay

Ecrire un message privé
Site perso
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Cette fonction va parcourir tous les répertoires et sous répertoires et sous sous répertoires et ...
puits retourner dans un tableau tous les fichiers (avec leurs arborescences) se terminant par l'extension indiquée

L'argument $tableauDeFichier ne devrai pas être utilisé il est utile seulement dans la fonction

Source

  • <?
  • function ParcourirDossier($LienRepertoir,$extentionRecherchee="",$tableauDeFichier=false)
  • {
  • if(!$tableauDeFichier)
  • {
  • $tableauDeFichier=array();
  • }
  • if(is_dir($LienRepertoir))
  • {
  • $ClassDir= dir($LienRepertoir);
  • while(($nomFichier=$ClassDir->read())!=false)
  • {
  • if($nomFichier=='.'||$nomFichier=='..')
  • {
  • continue;
  • }
  • elseif(is_dir($LienRepertoir."/".$nomFichier)&&strstr($nomFichier,"."))
  • {
  • //si vous enlevez se commentaire vous aurez le nom des dossiers en plus
  • //array_push($tableauDeFichier,$LienRepertoir."/".$nomFichier);
  • if(!strstr($nomFichier[0],'.'))/** inclue pas les dossier cacher*/
  • $tableauDeFichier= ParcourirDossier($LienRepertoir.$nomFichier."/",$extentionRecherchee,$tableauDeFichier);
  • }
  • elseif(strstr($nomFichier,$extentionRecherchee))
  • {
  • array_push($tableauDeFichier,$LienRepertoir.$nomFichier);
  • }
  • }
  • return $tableauDeFichier;
  • }
  • else
  • {
  • return false;
  • }
  • }
  • /**
  • * Exemple pour inclure tous les fichiers *.inc.php du répertoire include/function
  • * si il y a des répertoires dans le dossier include/function il ira les parcourir et de même si il y a des répertoires dans le répertoire ,...
  • * si vous mettez rien à la place de .inc.php il inclura tous les fichiers
  • */
  • $tableFichier = ParcourirDossier("include/function",".inc.php");
  • print_r($tableNomFichier)
  • foreach($tableFichier as $lienFichier)
  • {
  • include($lienFichier);
  • }
  • ?>
<?
function ParcourirDossier($LienRepertoir,$extentionRecherchee="",$tableauDeFichier=false)
 {
	 if(!$tableauDeFichier)
	 {
	 	$tableauDeFichier=array();
	 }
	 if(is_dir($LienRepertoir))
	 {
		 $ClassDir= dir($LienRepertoir);
		 while(($nomFichier=$ClassDir->read())!=false)
		 {
		 	if($nomFichier=='.'||$nomFichier=='..')
		 	{
		 		continue;
		 	}
			elseif(is_dir($LienRepertoir."/".$nomFichier)&&strstr($nomFichier,"."))
			{
			//si vous enlevez se commentaire vous aurez le nom des dossiers en plus
			//array_push($tableauDeFichier,$LienRepertoir."/".$nomFichier);
			if(!strstr($nomFichier[0],'.'))/** inclue pas les dossier cacher*/
			$tableauDeFichier= ParcourirDossier($LienRepertoir.$nomFichier."/",$extentionRecherchee,$tableauDeFichier);
			}
			elseif(strstr($nomFichier,$extentionRecherchee))
			{
				
				array_push($tableauDeFichier,$LienRepertoir.$nomFichier);
			}
		 }
		 return $tableauDeFichier;
	 }
	 else
	 {
		 return false;
	 }
 } 
/**
 * Exemple pour inclure tous les fichiers *.inc.php du répertoire include/function  
 * si il y a des répertoires dans le dossier include/function il ira les parcourir et de même si il y a des répertoires dans le répertoire ,...
 * si vous mettez rien à la place de .inc.php il inclura tous les fichiers
 */
$tableFichier = ParcourirDossier("include/function",".inc.php");
print_r($tableNomFichier)
foreach($tableFichier as $lienFichier)
{
  include($lienFichier);
}
?>



 Historique

20 janvier 2007 17:13:15 :
J'ai essayer de suivre les commentaires de kankrelune se qui a abouti à cette mise à jour. Je n'ai pas tous suivis, pour le reste n'utilisant que rarement la fonction substr, j'ai préféré garder ereg pour être sûr que l'extension serai à la fin . J'ai aussi utilisé la fonction array_push que j'avais oublier ,elle est plus utile que les count que j'avais utilisés
13 mars 2007 11:58:56 :
Ajout d'un exemple
07 novembre 2009 14:54:02 :
Petit modification
07 novembre 2009 15:05:32 :
optimisation
27 novembre 2010 12:55:17 :
suite commentaire de pierrelouis94

 Sources du même auteur

Source avec Zip RECHERCHER SANS S'OCCUPER DES ACCENTS

 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

FONCTION _SCANDIR UTF8 par LDDL
Source avec Zip RÉCUPÉRER LE TYPE D'UN FICHIER (3 FONCTIONS DIFFÉRENTES) par bad_dark_spirit
EFFACER DOSSIERS ET FICHIERS RÉCALCITRANTS par Stephane33
Source avec Zip PHPEXPLORER 2.00 BY DOTWIZARD512 par wizard512
Source avec Zip Source avec une capture BOUTON "PARCOURIR" PERMETTANT À L'UTILISATEUR DE SÉLECTIONNE... par kurt67

Commentaires et avis

Commentaire de kankrelune le 20/01/2007 15:32:23

Salut...

$extention=eregi_replace("\.","\\.",$extentionRecherchee);

utilise str_replace() plutot que eregi_replace() pour un remplacement sans expression rationnelle... tu gagnera en perf... de meme pour...

eregi(".*$",$nomFichier)

mieux vaut faire...

in_array(substr($nomFichier,strrpos('.',$nomFichier)),$extensions)

d'ailleur concernant la recherche des extensions mieux vaut passer un tableau directement en argument plutot que passer par une chaine que tu traite ensuite... tu met en premier dans ta boucle...

if($nomFichier === '.' || $nomFichier === '..')
    continue;

et ensuite...

if(is_dir($LienRepertoir."/".$nomFichier))
{
    // traitement d'un répertoire
}
elseif(empty($extentionRecherchee) ||
in_array(substr($nomFichier,strrpos('.',$nomFichier)),$extentionRecherchee))
{
  // traitement d'un fichier
}

Utilise plutot la constante...

DIRECTORY_SEPARATOR

plutot que

"/"

tu gagnera en portabilité

$grandeurTableau = count($tableauDeFichier);
If($tableauDeFichier[0]=='')
{
$tableauDeFichier[0]=$LienRepertoir."/".$nomFichier;
}
else
{
$tableauDeFichier[$grandeurTableau]=$LienRepertoir."/".$nomFichier;
}

le count est inutile...

if(empty($tableauDeFichier[0]))
    $tableauDeFichier[0]= $LienRepertoir.DIRECTORY_SEPARATOR.$nomFichier;
        else
            $tableauDeFichier[]= $LienRepertoir.DIRECTORY_SEPARATOR.$nomFichier;

un truc con mais ta boucle s'arrêtera si php tombe sur un fichier appelé 0 donc fais plutot

while(false !== ($nomFichier = $ClassDir->read()))

@ tchaOo°

Commentaire de trpp111 le 22/01/2007 17:14:54

Je ne met pas de note pour cette qource, ne l'ayant pas testée, et pour cause : je n'arrive pas à accéder à un répertoire distant.
Mon problème est de lister et traiter les fichiers contenus dans un répertoire situé sur une machine du réseau.
Quelle est la syntaxe du chemin pour y accéder?
Si quequ'un a une idée, merci de vos réponses!!
(je testerai cette source ensuite )

Commentaire de tgk le 10/03/2007 18:46:00

Bonjour,

Je cherche un script comme celui-ci mais j'ai pas vraiment compris comment on l'utilise. un petit exemple serait la bienvenu.

Merci

Commentaire de mtrzen le 13/03/2007 19:20:08

Tres pratique, cela me sauve la vie, je venais de faire une fonction listant les dossiers et sous dossiers comme la tienne, mais l avantage de la tienne est la possibilité de faire un tri avant affichage

rsort($tableFichier);
avant
foreach($tableFichier as $lienFichier)

Commentaire de tpkennes le 10/08/2009 17:31:02

Bonjour,

J'ai besoin d'aide :). Mon problème est bizarre et je comprends vraiment pas ce qui se passe.

cette fonction fonctionne parfaitement lorsque je la teste sur mon PC (PC1), voici le nom du dossier que j'utilise :
$Path = '\\\\servername\\c$\\dossier\\sousdossier;

Je viens de le mettre sur un autre ordi (PC2) et ca ne marche plus au moment du test if(is_dir()), il n'arrive pas à vérifier s'il s'agit d'un dossier ou pas.
Le truc étrange c'est que si je le lance via un fichier .bat contenant :

C:\xampplite\php\php.exe -c C:\xampplite\apache\bin\php.ini C:\web\SCRIPTMOTEUR\main.php

et bien cela fonctionne parfaitement,
en résumé, le script fonctionne lorsque je lance en .bat sur PC2, également via PHP sur PC1 mais ne fonctionne pas en PHP sur PC2.

Savez-vous d'où peut venir ce probleme ?

merci

Commentaire de micmonay le 19/09/2009 10:33:40

Hello,

Si c'est le même site essaye de partir toujours depuis la racine de ton site.

A+

Commentaire de tpkennes le 19/09/2009 10:38:15

Merci pour ta réponse et désolé de n'avoir pas mis à jour mon commentaire.

J'avais trouvé la solution, en fait ce code marche parfaitement. Le problème venait du fait que sur PC1, je lance xampplite (donc avec mon user) alors que sur PC2, le service Apache était lancé en tant que service Windows et que par défaut, l'utilisateur qui lance ce service est "Système Local".

Il suffisait donc de changer cet utilisateur car "Système Local" n'a pas accès à des ressources réseaux.

Encore merci.

Commentaire de t1amat le 27/04/2010 16:02:01

Bonjour,

pour ma part le script scan le répértoire source mais pas ces sous répetoire.

Commentaire de t1amat le 28/04/2010 16:03:17

Donc j'ai trouver la solution a mon problème.
Chez moi l'appel récursif ne fonctionnais pas j'ai donc fait une mofification de la fonctione (au niveau du rappel de la fonctio) j'ai aussi bouger l'ordre des conditions.



function ParcourirDossier($LienRepertoir,$extentionRecherchee="",$tableauDeFichier=false)
     {
     if(!$tableauDeFichier)
     {
     $tableauDeFichier=array();
     }
     if(is_dir($LienRepertoir))
     {
     $ClassDir= dir($LienRepertoir);
     while(($nomFichier=$ClassDir->read())!=false)
     {
     if($nomFichier=='.'||$nomFichier=='..')
     {
     continue;
     }
elseif(strstr($nomFichier,$extentionRecherchee))
     {
    
     array_push($tableauDeFichier,$LienRepertoir.$nomFichier);
     }
     else
     {
     //si vous enlevez se commentaire vous aurez le nom des dossiers en plus
     //array_push($tableauDeFichier,$LienRepertoir."/".$nomFichier);
     if(!strstr($LienRepertoir.$nomFichier[0],'.'))/** inclue pas les dossier cacher*/
{$tableauDeFichier= ParcourirDossier($LienRepertoir.$nomFichier.'/',$extentionRecherchee,$tableauDeFichier);}
     }
    
     }
     return $tableauDeFichier;
     }
     else
     {
     return false;
     }
     }

Commentaire de pierrelouis94 le 26/09/2010 16:49:41

Une petite erreur à la ligne 22 :
Il faut mettre $tableauDeFichier= ParcourirDossier($LienRepertoir.$nomFichier."/",$extentionRecherchee,$tableauDeFichier); sinon les sous dossiers manqueront de / dans leur lien.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

comment avec un "parcourir" ouvrir le fichier avec la bonne extension? [ par orion2a ] bonjour avec un "parcourir (en php) je vais chercher le chemin d'un fichier sur le reseau ou sur mon disk dur , en java script , je memorise ce chemin Uploader une image. [ par mwa_85 ] Bonjour, Vola daeux semaine que je suis en rade pour réussir à faire ce p*****n de script, pour uploader 1 image, la copié dans un dossier et la min galerie photo [ par webide ] Bonjour,J'ais un souci avec un script d'upload.Lorsque je vais dans l'espace membre, chez chaque membre j'ais un lien vers sa galerie photosVoici le c bug sur move_uploaded_file()... (gros fichiers) [ par Waynejunior ] Bonjour, j'ai apparemment un bug sur un script de move_uploaded_file()... sur de gros fichiers, mon script (voir en dessous) ne marche pas. Il ne fait Uploader [ par ldevun ] Bonjour, Je souhaite faire une copie de fichier dans un répertoire distant. Mon probleme réside lorsque je veux mettre une condition si je choisi d al 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 lien vers tous les fichier d'un dissier [ par kelm_by ] salut tous le monde,j'ai fait ce code pour metre un lien vers tous les fichier d'un dosier mais ca marche pas aider moi svp&lt;?$folder = "./";$dossie Verifier si un répertoire est présent sur le server [ par thedjpredator ] Bonjour,Jai un petit problème jai réalisé un petit système de navigation entre répertoiresde mon site du style :/dossier1//dossier2//dossier3/...Avec uploader un fichier (à l'aide!!!!) [ par chrak ] bonjour ,j' ai un site chez ifrance , je veux uploader des images ds mon rep image de mon site , et j' arrive pas , voici le script simplifier &lt; bouton qui fait 2 actions [ par vinz78 ] Salut alors voici mon code &lt;?php// Constantesdefine('TARGET', 'E://wamp/www/Projet/Projet2/');     // Repertoire cibledefine('MAX_SIZE', 512000);  


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 : 0,842 sec (4)

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