Accueil > > > [PHP5.1] LISTING D'UN RÉPERTOIRE AVEC FILTRES
[PHP5.1] LISTING D'UN RÉPERTOIRE AVEC FILTRES
Information sur la source
Description
Salut, Je commençais à en avoir un peu marre de voir des sources ou des portions de codes (dans le forum) toujours en procédural (style PHP 3 ou 4), sans jamais utiliser d'itérateurs. Comme c'est le genre de source qui revient régulièrement, il faut prendre le problème à la base... Alors maintenant, plus aucune excuse. Si vous avez PHP5.1 (ou plus) et que vous utilisez encore une boucle immonde du genre : while (false !== ($file = readdir($handle))) { // Blabla } ben faut penser à passer la seconde et à embrayer. Il s'agit là d'un petit package permettant de parcourir un répertoire en 3 lignes de code, de manière récursive, avec possibilité de mettre des filtres (type, date, taille, extension, fichier, répertoire, expression régulière, etc) que l'on peut combiner. Ce package de classes est (il me semble) enfantin à utiliser. Si on sait faire un foreach sur un tableau,on peut s'en sortir haut la main, les doigts dans l'nez et la tête dans l'c.. Il ne s'agit que d'un outil pour aider à parcourir un répertoire récursivement, pas d'un truc tout fait qui affiche du html dégueulasse avec des tableaux et des compteurs de lignes pas possibles (non mais on voit d'ces trucs des fois...). A vous de gérer l'affichage de la sortie.
Source
- <?php
-
- # Inclusion des fichiers nécessaires, définitions des classes, et tout le tremblement
- require_once('/path/to/xdir/init_xdir.php');
-
- # Notre itérateur
- $oDir = new XDir('/home/user/docs');
-
- # Ne lister que les fichiers modifiés depuis une semaine
- $oDir -> addFilter('mtime', strtotime('-1 week'));
-
- # Ne lister que les fichiers audio
- $oDir -> addFilter('audio');
-
- # On boucle
- foreach ($oDir as $oFile) {
- echo $oFile -> getFilename() . '<br />'; //
- }
- ?>
<?php
# Inclusion des fichiers nécessaires, définitions des classes, et tout le tremblement
require_once('/path/to/xdir/init_xdir.php');
# Notre itérateur
$oDir = new XDir('/home/user/docs');
# Ne lister que les fichiers modifiés depuis une semaine
$oDir -> addFilter('mtime', strtotime('-1 week'));
# Ne lister que les fichiers audio
$oDir -> addFilter('audio');
# On boucle
foreach ($oDir as $oFile) {
echo $oFile -> getFilename() . '<br />'; //
}
?>
Conclusion
Le code source est documenté à outrance (format phpDoc + commentaires au fil du code). Un fichier README donne les base pour utiliser la classe. Le fichier Filters.txt explique en détail (de manière plutôt exhaustive) le fonctionnement de chaque filtre. Il explique également comment écrire de nouveaux filtres (tiens j'y pense : j'ai pas fait de filtre pour le propriétaire ou le groupe, ou les permissions... à faire donc...). Le bazar était en GPLv2, il passe en GPLv3, et mes classes ont un peu changé de nom (j'ai appelé ce package XDir, pour eXtended Directory Recursive Iterator).
J'aimerais avoir l'avis de personnes se considérant comme "débutantes" ou "néophytes" quant à la facilité de prise en main. Je m'interroge surtout sur l'utilisation des items obtenus lors de l'itération, qui sont des instances d'une classe héritant de SplFileInfo... Pas sûr que ça parle à tout le monde, finalement... Donc s'il faut faire de la doc là dessus, pas de problème, si ça peut aider les débutants à lâcher un peu la grappe à opendir() et readdir()... je suis prêt à pas mal de sacrifices :)
Pour ceux qui souhaitent un détail du fonctionnement des filtres et de cette classe en général, j'avais commis un billet sur mon blog à l'occasion de la dernière grosse mise à jour : http://www.blogoolic.fr/php5-parcourir-recursive ment-un-dossier-en-filtrant-les-fichiers
Historique
- 22 décembre 2007 22:03:43 :
- Suppression d'une référence à un fichier inexistant
- 28 mai 2009 11:11:02 :
- Grosse mise à jour du bazar
- 17 août 2009 03:40:00 :
- Ajout de deux nouveaux filtres (owner et group).
- 28 septembre 2009 13:36:30 :
- Correction de 2 bugs dans les filtres 'extension' et 'regex'
- 28 septembre 2009 21:39:29 :
- Ajout d'une méthode reset() pour supprimer les filtres et pouvoir recommencer une itération sur le même répertoire.
- 01 décembre 2009 01:23:41 :
- Correction de 2 bugs :
- lors d'une itération non récursive, l'élément courant était un objet DirectoryIterator, du fait que c'est le comportement normal de DirectoryIterator. Une nouvelle classe surchargeant DirectoryIterator et modifiant ce comportement a été introduite
- lors de l'utilisation d'une classe FileInfo personnalisée, celle-ci n'était pas correctement définie
- 16 janvier 2010 20:46:07 :
- Correction d'un bug signalé par JoganCalagan + quelques petites fonctionnalités de confort en plus. Une version 1.1.6 est prévue pour... la prochaine fois ^^
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Fichier INDEX auto-exécutable [ par BSide ]
BSideBonjour,j'utilise EasyPHP1.6.Habituellement, quand je veux exécuter un script PHP, je vais sur le web local, je sélectionne le répertoire qui m'i
probleme parcours fichier [ par TRASH52 ]
TRASH52En fait j'ai testé des trucs avec les fonctions chdir, mkdir mais je n'arrive pas à voir ou je me situe!j'aimerai si possible, qu'on
sous-repertoire fichier ............ [ par TRASH52 ]
TRASH52bon je vous met le code!En fait, je voudrais que mon programme a partir d'u
ftp_get php [ par CC24 ]
bonjour à tous !est-ce que l'un d'entre vous pourrait m'indiquer la syntaxe à utiliser pour télécharger un fichier situé dans un sous-répertoire du ré
Rechercher capacité d'un répertoire sur un serveur [ par twiems ]
TwiemsJe souhaite rechercher et afficher la capacité d'un répertoire sur le serveur auquel mon pc est connecté.Y a t il une fonction ou une procédure
Supprimer les .html d'un répertoire [ par twiems ]
Twiems:PJe souhaiterais supprimer tous les fichiers d'extension .html d'un dossier nommé chambre mais je n'y parvient pas.Si vous pouviez m'aider je v
Probleme de création et de copie de Répertoire [ par jdaviaud ]
Voila, dans mon script, j'utilise les deux fonctions suivantes pour copier le contenu d'un répertoire avec creation du nouveau répertoire de destinati
Protection de l'adresse de mon répertoire de téléchargement : solution $HTTP_REFERER [ par 1motorola1 ]
Salut à tout le monde !Alors voila je tente ces derniers temps d'éviter que les visiteurs de mon site puisse connaitre le répertoire ou se situe les f
affichege d'image [ par lumikele ]
Bonjour,je suis surement le plus débutant des débutant puisque jusqu'à 10 mn, je ne connaissais pas la php :-(J'ai fait plusieurs choses en html mais
Probleme listing avec mysql [ par zzzzzz ]
Yep j'aimerai lister un champ nick par nom donc je fait ca avec mysql. mais il y a comme euh un probca me liste dans cet ordre:Diablusmembres10membres
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
HTML VERS PDFHTML VERS PDF par spike911
Cliquez pour lire la suite par spike911
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|