Napisany mar-30-2009
directoryiterator
Być może nie wiecie, ale w PHP 5 istnieje świetna alternatywa dla funkcji opendir(),readdir() czy też scandir().Przedstawiam zatem obiektowy sposób poruszania się po katalogach systemu plików. Spójrzmy na przykład użycia:
try {
$dir = new DirectoryIterator ('./przykladowy_katalog');
// $file jest rowniez obiektem klasy DirectoryIterator
foreach ($dir as $file)
echo $file->GetFilename();
}
catch (RuntimeException $e) {
echo $e->getMessage();
}
Pragnę zwrócić uwagę, iż w powyższym skrypcie przechwytujemy wyjątek RuntimeException, który zostanie zgłoszony np. jeśli katalog przekazany w konstruktorze klasy nie istnieje.
Pozostaje mi omówić kilka podstawowych metod, które dostarcza DirectoryIterator. Zatem:
- bool isDir() - sprawdza czy bieżący element to katalog
- bool isFile() - sprawdza czy bieżący element to plik
- bool isDot() - sprawdza czy bieżący element to ‘.’ lub ‘..’
- string getFilename() - zwraca nazwę bieżącego elementu (pliku lub katalogu)
- int getSize() - zwraca rozmiar pliku
- bool isReadable() - sprawdza czy plik można odczytać
- bool isWritable() - sprawdza czy w pliku można zapisywać zmiany
- bool isExecutable() - sprawdza czy plik można wykonać
- string getType() - zwraca typ bieżącego elementu (dir,file) a nie MIME!
Prawda, że proste i przyjemne? Zainteresowanych odsyłam do oficjalnej dokumentacji, którą można znaleźć TUTAJ.

Od razu nasuwa się pytanie co z wydajnością w porównaniu do opendir() czy scandir(), bo przyznam że osobiści nie testowałem.
PS. Dzięki za linka
Przeprowadziłem parę testów, zazwyczaj scandir() był najszybszy, drugie miejsce dla opendir(). DirectoryIterator jest najwolniejszy. Przygotuje wyniki i zrobię aktualizację posta.