Parcourir un répertoire et ses sous sous sous... répertoire et retourner les fichiers qui ont l'extension voulue

Soyez le premier à donner votre avis sur cette source.

Snippet vu 28 803 fois - Téléchargée 21 fois

Contenu du snippet

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


<?
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); } ?>

A voir également

Ajouter un commentaire

Commentaires

pierrelouis94
Messages postés
1
Date d'inscription
lundi 15 février 2010
Statut
Membre
Dernière intervention
26 septembre 2010
-
Une petite erreur à la ligne 22 :
Il faut mettre $tableauDeFichier= ParcourirDossier($LienRepertoir.$nomFichier."/",$extentionRecherchee,$tableauDeFichier); sinon les sous dossiers manqueront de / dans leur lien.
t1amat
Messages postés
5
Date d'inscription
mardi 15 septembre 2009
Statut
Membre
Dernière intervention
3 mai 2011
-
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;
}
}
t1amat
Messages postés
5
Date d'inscription
mardi 15 septembre 2009
Statut
Membre
Dernière intervention
3 mai 2011
-
Bonjour,

pour ma part le script scan le répértoire source mais pas ces sous répetoire.
tpkennes
Messages postés
4
Date d'inscription
mercredi 25 mars 2009
Statut
Membre
Dernière intervention
19 septembre 2009
-
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.
cs_micmonay
Messages postés
6
Date d'inscription
vendredi 17 décembre 2004
Statut
Membre
Dernière intervention
25 mai 2007
-
Hello,

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

A+

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.