Accueil > > > CLASSE DIRECTORYITERATOR POUR PHP4
CLASSE DIRECTORYITERATOR POUR PHP4
Information sur la source
Description
Dans le cadre d'un de mes projets, j'utilise la classe PHP 5 DirectoryIterator vraiment utile pour le parcours de dossier.
Elle utilise les itérateurs et permet donc un parcours plus simple (ca évite de faire des vérifications dans les boucles, contrairement à la classe dir).
Le soucis, c'est qu'elle n'est QUE PHP 5. Je l'ai donc implémentée en PHP 4 afin d'avoir un code fonctionnel, même sur un serveur en PHP 4.
Je vous laisse voir le code :)
Source
<?php
/**
* Projet : Directory
* File : DirectoryIterator.class.php
*
* class DirectoryIterator
* @author Codefalse <codefalse [at] altern [dot] org>
* @copyright Codefalse
* @version 20070529
* @licence GPL - http://www.gnu.org/licenses/gpl.html - General Public Licence
* @version 1.0.0
*/
class DirectoryIterator {
/**
* Orignal Path
*
* @var string
*/
var $_sRoot;
/**
* Opendir ressource
*
* @var ressource
*/
var $_rOpenDir;
/**
* Current File
*
* @var string
*/
var $_sCurrentFile;
/**
* Starting Offset
*
* @var int
*/
var $_iOffset = -1;
/**
* function DirectoryIterator
* Constructor
* Open the path given and start the reading
*
* @param string $sPath : The path. Need to finish by / (DIRECTORY_SEPARATOR)
*
* @return void
*/
function DirectoryIterator ($sPath) {
$this->_sRoot = $sPath;
clearstatcache ();
if (is_dir ($sPath) === true) {
$this->_rOpenDir = opendir ($sPath);
$this->next();
}
else {
die ('Invalid Path !');
}
}
/**
* function current
* Get the current element value
*
* @return string
*/
// @return DirectoryIterator ?!
function current () {
return $this->_sCurrentFile;
}
/**
* function next
* Move to next entry
*
* @return void
*/
function next () {
$this->_sCurrentFile = readdir ($this->_rOpenDir);
$this->_iOffset++;
}
/**
* function rewind
* Rewind dir back to the start
*
* @return void
*/
function rewind () {
$this->_sCurrentFile = rewinddir ($this->_rOpenDir);
$this->_iOffset = -1;
$this->next();
}
/**
* function valid
* Check whether dir contains more entries
*
* @return string
*/
function valid () {
if ($this->_sCurrentFile === false)
return false;
else
return true;
}
/**
* function key
* Return current dir entry
*
* @return string
*/
// @return string ?!
function key () {
return $this->_iOffset;
}
/**
* function isDir
* Returns true if file is directory
*
* @return boolean
*/
function isDir () {
clearstatcache ();
return is_dir ($this->_sRoot.DIRECTORY_SEPARATOR.$this->_sCurrentFile);
}
/**
* function isDot
* Returns true if current entry is '.' or '..'
*
* @return boolean
*/
function isDot () {
if ($this->_sCurrentFile == '.' || $this->_sCurrentFile == '..')
return true;
else return false;
}
/**
* function getATime
* return last access time of file
*
* @return int
*/
function getATime () {
clearstatcache ();
return fileatime ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function getCTime
* Return inode modification time of file
*
* @return int
*/
function getCTime () {
clearstatcache ();
return filectime ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function getGroup
* Return file group
*
* @return int
*/
function getGroup () {
clearstatcache ();
return filegroup ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function getInode
* Return file inode
*
* @return int
*/
function getInode () {
clearstatcache ();
return fileinode ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function getMTime
* Return last modification time of file
*
* @return int
*/
function getMTime () {
clearstatcache ();
return filemtime ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function getOwner
* Return file owner
*
* @return int
*/
function getOwner () {
clearstatcache ();
return fileowner ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function getPerms
* Return file permissions
*
* @return int
*/
function getPerms () {
clearstatcache ();
return fileperms ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function getSize
* Return file size
*
* @return int
*/
function getSize () {
clearstatcache ();
if (is_file ($this->_sRoot.$this->_sCurrentFile) === true)
return filesize ($this->_sRoot.$this->_sCurrentFile);
else return -1;
}
/**
* function getFilename
* Return filename of current dir entry
*
* @return string
*/
function getFilename () {
return $this->_sCurrentFile;
}
/**
* function getPath
* Return directory path
*
* @return string
*/
function getPath () {
return $this->_sRoot;
}
/**
* function getPathname
* Return path and filename of current dir entry
*
* @return string
*/
function getPathname () {
return $this->_sRoot.$this->_sCurrentFile;
}
/**
* function getType
* Return file type
*
* @return string
*/
function getType () {
clearstatcache ();
return filetype ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function isExecutable
* Returns true if file is executable
*
* @return boolean
*/
function isExecutable () {
clearstatcache ();
return is_executable ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function isFile
* Returns true if file is a regular file
*
* @return boolean
*/
function isFile () {
clearstatcache ();
return is_file ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function isLink
* Returns true if file is symbolic link
*
* @return boolean
*/
function isLink () {
clearstatcache ();
return is_link ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function isReadable
* Returns true if file can be read
*
* @return boolean
*/
function isReadable () {
clearstatcache ();
return is_readable ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function isWritable
* Returns true if file can be written
*
* @return boolean
*/
function isWritable () {
clearstatcache ();
return is_writable ($this->_sRoot.$this->_sCurrentFile);
}
/**
* function getChildren
* Returns the current entry if it is a directory
*
* @return DirectoryIterator
*/
function getChildren () {
if (is_dir ($this->_sRoot.$this->_sCurrentFile) === true)
return new DirectoryIterator ($this->_sRoot.$this->_sCurrentFile.DIRECTORY_SEPARATOR);
}
}
?>
Conclusion
Je n'ai pas testé toutes les fonctions donc il se peut qu'il subsiste des bugs. Les fonctions sont très simples donc normallement non, mais on sais jamais :)
Les commentaires sont bien évidement les bienvenus :)
Historique
- 29 mai 2007 12:31:39 :
- Ajout de quelques tags
- 30 mai 2007 11:42:41 :
- Prise en compte des commentaires de Naixn :)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
TIME OUT HELP [ par ekinoks ]
alors voila ... ce code ci desu est un indexeur de ftp... le problemme c'est que quant les serveur son un peu gros, la page n'a pas le temps de tout i
Problème upload de fichier [ par Tupac59 ]
Bonjour, ce script me permet à un membre d'uploader des fotos dans son dossier. Le problème est que lorsque que j'upload une foto, celle-ci
Problème de portée de variable URGENT [ par Tupac59 ]
Voila le problème: depuis la page précédente je POST ['log2'], dans la page suivante je récupère ce log2 dans la variable $log et cela fonctionne puis
valeur input file [ par chamallow ]
Bon, ce matin je dois vraiment le faire exprès c'est pas possible grrrrr Voilà je fais un formulaire tout bete pour un upload pour mes tests : <htm
Uploader et minituariser un fichier JPEG/GIF sans passer par un directory temporaire [ par amewole ]
Comment est il possible d'Uploader et de réduire la taille de fichier graphique format JPEG/GIF sans passer par un directory&nb
diaporama de fichiers php [ par pillets ]
BonjourJe souhaiterais faire une diapo de fichiers php, php3 ou html.Cela fonctionnerait comme une galerie d'images avec un bouton "suivant" et "pr
Lecture d'un nom de fichier...2 [ par magicsmacks ]
Bonjour, J'avais demandais il y a qq jours ceci : " Bonjour, Je possède un dossier sur mon serveur dans lequel
le click sur un lien vers fichier est enregistré dans excel pour un suivi [ par dam_37 ]
J'ai une page avec 4 liens vers des pdf ou images s'ouvrant dans d'autres fenêtres.J'aimera
J'ai un chemin vers un fichier , je voudrai qu'il se crée automatiquement si il n'existe pas [ par ranouf ]
Bonjour, J'ai un chemin: /var/www/test/fonctions/voir.php en l'occurence ce "fonctions/voir.php" n'existe pas. Ce que je voudrai savoir c si il exist
Probleme de retour a la ligne Parser CSS 2.0 [ par Tortue95 ]
Bonjour a tous je suis en train de monter un podcast donc j'ai cree un flux RSS 2.0voici un bout du code du fichier rss.xml: ...<itunes
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|