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.

2 Odpowiedzi : “directoryiterator”

  1. 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

  2. Ralf napisał:

    Przeprowadziłem parę testów, zazwyczaj scandir() był najszybszy, drugie miejsce dla opendir(). DirectoryIterator jest najwolniejszy. Przygotuje wyniki i zrobię aktualizację posta.

Trackbacks/Pingbacks

  1. Blog o PHP » Archiwum Bloga » SPL exceptions - [...] klasa DirectoryIterator - TUTAJ [...]

Pozostaw Odpowiedź