In acest tutorial e prezentata clasa PHP
DirectoryIterator, adaugata in PHP 5+.
Aceasta clasa e utila in parcurgerea unui director, pentru a obtine informatii despre fisierele si directoarele din el (nume, marime, data ultima accesare, etc.).
Ca orice alta clasa, pentru a folosi
DirectoryIterator trebuie mai intai creata o instanta de obiect la aceasta clasa:
$objDI = new DirectoryIterator($path);
- $path - reprezinta calea directorului ce trebuie citit. Pentru directorul curent se poate folosi ca $path:
__DIR__ , sau
dirname(__FILE__).
Apoi se pot aplica metodele clasei.
- Pentru a intelege mai bine ce face DirectoryIterator , iata cateva exemple practice.
Obtine calea la fisier
- Se foloseste metoda
getPath().
$objDI = new DirectoryIterator(__DIR__);
echo $objDI->getPath(); // /home/examples/public_html
Instanta la clasa DirectoryIterator contine un obiect cu date despre directoarele si fisierele din directorul accesat. Acest obiect poate fi parcurs cu o instructiune
foreach(), ca sa se obtina datele fiecarui element.
Obtine numele fisierelor din directorul curent
- Se foloseste
isFile() ca sa verifice daca e fisier, si
getFilename() sa preia numele.
$objDI = new DirectoryIterator(__DIR__);
foreach($objDI as $fileinfo) {
// daca e fisier
if($fileinfo->isFile()) {
echo $fileinfo->getFilename() .'<br/>';
}
}
/* Returneaza ceva similar cu:
admin.php
coursesweb.jpg
jquery.js
course.html
*/
Afla marimea fisierelor
- Se foloseste
isFile() ca sa verifice daca e fisier, si
getSize() sa preia marimea (in bytes).
$objDI = new DirectoryIterator(__DIR__);
foreach($objDI as $fileinfo) {
// daca e fisier
if($fileinfo->isFile()) {
$filesize = $fileinfo->getSize() / 1024; // 1 KB = 1024 bytes
echo $fileinfo->getFilename() .' '. $filesize .' KB<br/>';
}
}
/* Returneaza ceva similar cu:
admin.php 3.1572265625 KB
coursesweb.jpg 11.498046875 KB
jquery.js 122.095703125 KB
*/
Obtine numele directoarelor din cel curent
- Se foloseste
isDir() sa verifice daca e director,
isDot() prin care se verifica sa nu fie '.' sau '..', si
getFilename() sa preia numele.
$objDI = new DirectoryIterator(__DIR__);
foreach($objDI as $fileinfo) {
// daca e director, dar nu '.' sau '..'
if($fileinfo->isDir() && !$fileinfo->isDot()) {
echo $fileinfo->getFilename() .'<br/>';
}
}
/* Returneaza ceva similar cu:
Pages
CoursesWeb
Tutorials
*/
Afla permisiunile CHMOD
- Se foloseste
isDot() sa nu fie '.' sau '..', si
getPerms() sa preia permisiunile (in numar intreg decimal).
$objDI = new DirectoryIterator(__DIR__);
foreach($objDI as $fileinfo) {
// daca nu e '.' sau '..'
if(!$fileinfo->isDot()) {
// preia octal din numar intreg decimal
$octal_perms = substr(sprintf('%o', $fileinfo->getPerms()), -4);
echo $fileinfo->getFilename() .' '. $octal_perms .'
';
}
}
/* Returneaza ceva similar cu:
admin.php 0644
Pages 0755
Tutorials.html 0644
*/
Verifica daca directoarele si fisierele pot fi scrise
- Se foloseste
isWritable(). Returneaza True daca pot fi scrise date cu PHP in fisierul /directorul curent, altfel False.
$objDI = new DirectoryIterator(dirname(__FILE__));
foreach($objDI as $fileinfo) {
if($fileinfo->isWritable()) {
echo $fileinfo->getFilename() .' poate fi scris<br/>';
}
}
/* Returneaza ceva similar cu:
coursesweb.htm poate fi scris
Pages poate fi scris
websites.txt poate fi scris
*/
Afla data ultimei accesari a fisierelor
- Se foloseste
isFile() ca sa verifice daca e fisier, si
getATime() sa preia data ultimei accesari (in Unix timestamp).
$objDI = new DirectoryIterator(dirname(__FILE__));
foreach($objDI as $fileinfo) {
if($fileinfo->isFile()) {
echo $fileinfo->getFilename() .' '. $fileinfo->getATime() .'<br/>';
}
}
/* Returneaza ceva similar cu:
coursesweb.htm 1319637336
Pages 1319880959
websites.txt 1327757524
*/
• Ca sa vedeti lista cu toate metodele clasei DirectoryIterator, vizitati:
Clasa DirectoryIterator.