Analyse récursive un répertoire avec PHP
17 giugno 2008, 0:55 Open Source , PHP , Trucs & Astuces Juin 17, 2008, 12:55
Il ya des scripts que vous devriez toujours avoir à portée de main, car il finit par ce que vous avez besoin dans les moments les plus inattendus et les occasions.
Cette fonction en PHP, par exemple, m'a sauvé dans de nombreux cas un gaspillage inutile de temps qui passe comme argument une chaîne qui est le chemin complet pour numériser la fonction scan_directory_recursively retourne un tableau contenant la structure complète du répertoire spécifié.
Vous pouvez indiquer, comme le second argument facultatif, une extension ou une portion de texte qui ne sera pas nécessairement figurer dans le nom du fichier. Il s'agit essentiellement d'un filtre pour exclure une certaine catégorie de résultats.
Par exemple:
$dirs=scan_directory_recursively('/home/ivan/Tempo');
retourne un tableau de tous les répertoires et les fichiers dans / home / ivan / heure, tandis que:
$dirs=scan_directory_recursively('/home/ivan/Tempo','.php');
retourne un tableau de tous les répertoires et les fichiers dans / home / ivan / heure, sauf pour les fichiers avec l'extension. php!
Il n'est pas mon fait, pourquoi je demande à ceux qui font usage dans leurs projets de ne pas retirer les références à lixlpixel, le site Internet d'où ils viennent.
Voici la fonction:
<? Php / / Fonctions récursives PHP ------------------------- lixlpixel / / Scan_directory_recursively (répertoire à analyser, filtre) / / Attend chemin vers le répertoire et une extension facultative pour filtrer / / Bien sûr, PHP doit avoir les autorisations nécessaires pour lire le répertoire / / Spécifiez que vous et tous les fichiers et dossiers à l'intérieur de ce répertoire / / ------------------------------------------------ ------------ / / Pour utiliser cette fonction pour obtenir tous les fichiers et répertoires dans un tableau, écrire: / / $ Filestructure scan_directory_recursively = ('path / to / directory'); / / Pour utiliser cette fonction de scanner un répertoire et de filtrer les résultats, écrire: / / $ FileSelection scan_directory_recursively = ('directory', «extension»); scan_directory_recursively fonction ($ repertoire, $ filter = FALSE) { / / Si le chemin a une barre oblique à la fin, nous l'enlever ici if (substr ($ repertoire, -1) == '/') { Annuaire $ = substr ($ repertoire, 0, -1); } / / Si le chemin n'est pas valide ou non est un répertoire ... if (file_exists ($ repertoire) | |! is_dir ($ repertoire)) { / / ... on retourne faux et quitter la fonction return FALSE; / / ... d'autre si le chemin est lisible } Elseif (is_readable ($ repertoire)) { / / On ouvre le répertoire $ Directory_list = opendir ($ repertoire); / / Et parcourir les articles à l'intérieur while (FALSE! == ($ file = readdir ($ directory_list))) { / / Si le pointeur de fichier n'est pas le répertoire courant / / Ou le répertoire parent if ($ file! = '.' && $ fichier! = '..') { / / Nous construisons le nouveau chemin pour numériser $ PATH = $ répertoire '/' $ fichier..; / / Si le chemin est lisible if (is_readable ($ path)) { / / Nous avons scindé le nouveau chemin d'accès par les annuaires $ Sous-répertoires = explode ('/', $ path); / / Si le nouveau chemin est un répertoire if (is_dir ($ path)) { / / Ajouter les détails d'annuaire pour la liste des fichiers $ Directory_tree [] = array ( 'Chemin' => $ path, 'Name' => fin ($ sous-répertoires), 'Kind' => 'répertoire', / / On regarde le nouveau chemin d'accès en appelant cette fonction 'Contenu' => scan_directory_recursively ($ path, $ filtre)); / / Si le nouveau chemin est un fichier } Elseif (is_file ($ path)) { / / Obtenir l'extension de fichier en prenant tout après le dernier point $ Extension = fin (explode (, End ($ sous-répertoires)) '.'); / / Si il n'y a pas de filtre en Septembre ou le filtre est réglé et des allumettes if ($ filtre === FALSE | | $ filtre == $ extension) { / / Ajouter les détails du fichier à la liste des fichiers $ Directory_tree [] = array ( 'Chemin' => $ path, 'Name' => fin ($ sous-répertoires), 'Extension' => $ extension, 'Taille' = filesize> ($ path), 'Kind' => 'fichier'); } } } } } / / Fermer le répertoire closedir ($ directory_list); / / Retour liste des fichiers return $ directory_tree; / / Si le chemin n'est pas lisible ... Else {} / / ... on retourne faux return FALSE; } } / / ------------------------------------------------ ------------ ?>
Pour votre commodité, mais aussi le mien, j'ajoute ici une version sans les commentaires et prêt pour le téléchargement:














