Fonction recursive de dossiers

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 672 fois - Téléchargée 15 fois

Contenu du snippet

Encore une fonction de parcours de dossiers et sous dossiers, qui retourne ici un tableau associatif avec :
- en clé, le nom du fichier
- en valeur, le chemin

Source / Exemple :


function ScanDirectory($Directory, $fileTypes = null){

		$MyDirectory = opendir($Directory) or die('Erreur');
		while(false !== ($Entry = @readdir($MyDirectory))) {
			if(is_dir($Directory.'/'.$Entry)&& $Entry != '.' && $Entry != '..') {
				$tmp = ScanDirectory($Directory.'/'.$Entry, $fileTypes);
				$files = array_merge((array)$files, (array)$tmp);
			} else {
				// si le tableau est renseigné
				if (is_array($fileTypes)) {
					// on recupère l'extension du fichier
					$ext = get_file_extension($Entry);
					// on vérifie qu'elle fait partie de celles autorisée
					if (in_array ($ext, $fileTypes)) {
						$files[$Entry] = $Directory.'/';
					}
					// sinon, on mets toutes les occurences
				} else {
					$files[$Entry] = $Directory.'/';
				}
				
				/* note : on stocke les valeurs dans un tableau associatif :

  • clé nom du fichier
  • valeur chemin du fichier
  • /
} } closedir($MyDirectory); return $files; } function get_file_extension($file_name) { return substr(strrchr($file_name,'.'),1); }

Conclusion :


utiliser cette fonction ainsi :

$extensions = Array('jpg');
$files = ScanDirectory('../images', $extensions);

foreach($files as $cle => $valeur) {
echo $cle . ' : ' . $valeur;
}

A voir également

Ajouter un commentaire

Commentaires

MacGaliver
Messages postés
149
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
21 juillet 2013
1 -
Certaines personnes on que des connaissances, d'autres on une expérience professionnel, mais tout le monde peut se tromper ou ne pas savoir...

Cordialement.
neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13 -
On m'a dit un jour que j'étais un peu sec dans mes commentaires (c'est une litote). Bon, c'est vrai, je le reconnais et m'en excuse.
Mais à ma décharge, l'exaspération (entraînée par la lassitude) l'emporte souvent sur le sang-froid.
tefa24600
Messages postés
30
Date d'inscription
samedi 4 août 2007
Statut
Membre
Dernière intervention
21 février 2012
-
J'avoue avoir ma part de responsabilité dans la mauvaise utilisation de cette fonction (ayant eu la flemme de lire la doc jusqu'au bout) et c'est pourquoi je m'excuse d'avoir fourni une source avec une erreur connu de tout bon connaisseur en PHP.

L'erreur est corrigée, je laisse le partage dans le cadre où, si un débutant cherche avec ces mots clés, il puisse découvrir ce code (ainsi que ceux en rapport) et, s'il le souhaite, évoluer, se faire sa propre opinion voire même modifier cette source !
neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
13 -
Si tu avais pris la peine de lire la doc PHP, tu aurais vu que la syntaxe que tu utilises :
while($Entry = @readdir($MyDirectory)) {
n'est pas bonne. Et je ne vais pas m'étendre sur le sujet, parce que je l'ai déjà fait des dizaines de fois et je suis lassé de voir toujours la même chose, mal faite.

Et quand je dis que ta source n'apporte rien de nouveau, je ne me base pas sur ce que tu as écrit, mais sur le fait que, simplement, elle n'apporte rien de nouveau.
On va pas refaire un débat sur "faut-il partager ou non", parce qu'on tournerait en rond. Mais ce que j'ai écrit voulait quand même dire que cette source, n'apportant rien de nouveau, ne mérite pas nécessairement d'être publiée (indépendamment de sa qualité, dont je ne parle pas du tout). C'est pas une critique en soi, juste un constat, toujours le même : phpcs est jonché de sources qui n'apportent rien et qui sont souvent bourrées d'erreurs, de failles, etc. Et c'est dommage, parce qu'au final, ce sont les débutants qui morflent en n'apprenant pas à coder correctement.
Bref, désolé pour la digression.
tefa24600
Messages postés
30
Date d'inscription
samedi 4 août 2007
Statut
Membre
Dernière intervention
21 février 2012
-
Je n'ai pas dit que ma source apportait quelque chose de nouveau, je voulais juste trouver un moyen de stocker une liste de fichiers dans un tableau associatif.

En ce qui concerne la fonction readdir, tu parles surement du fait que je ne me sers pas de ce qu'elle retourne, mais plutôt que je lui dise "tant que tu lui affecte une valeur, on continue".

En attendant, si tu avais eu la gentillesse d'expliquer en quoi cette source est si mauvaise, je te demanderai la prochaine fois d'apporter un commentaire un poil plus constructif car ce genre d'intervention aussi est très lassante...

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.