Jak wylistować wszystkie pliki w katalogu?
Coldpeer
Jest kilka sposobów na wylistowanie plików i podkatalogów w folderze.
$dir = opendir('katalog');
while (false !== ($file = readdir($dir)))
if ($file !== '.' && $file !== '..')
echo $file . '<br />';
- Używając iteratorów:
foreach (new DirectoryIterator('katalog') as $file)
if (!$file->isDot())
echo $file->getFilename() . ',';
- Wykorzystując klasę
Directory
, z pomocjądir()
:
$dir = dir('katalog');
while ($file = $dir->read())
if ($file !== '.' && $file !== '..')
echo $file . '<br />';
$dir->close();
- Korzystając z funkcji
scandir()
:
foreach(scandir('katalog') as $file)
if ($file !== '.' && $file !== '..')
echo $file . '<br />';
- Za pomocą funkcji
glob()
:
foreach (glob('*', GLOB_BRACE) as $file)
if ($file !== '.' && $file !== '..')
echo $file . '<br />';
Powyższy kod wyświetli pliki z obecnego katalogu. Aby pobrać je z folderu "katalog" należy:
foreach (glob('katalog/*', GLOB_BRACE) as $file)
Można też wybrać pliki o określonych rozszerzeniach (poniższy przykład dla plików *.jpg i *.gif):
foreach (glob('katalog/{*.jpg,*.gif}', GLOB_BRACE) as $file)
Jest jakaś możliwość żeby którakolwiek z tych metod otwierała folder znajdujący się na innym serwerze, lub na dysku lokalnym?
Stare te komentarze poniżej, ale odpisze na nie, bo właśnie tym się zajmuje i ten artykuł mi się przydał.
@Format - nie widzi .htaccess, bo jest ukryty zapewne
@WIktorDelphi - nie jest różnica znacząca na tyle, żeby się nad tym zastanawiać, ale chodzi o to, że to OOP z PHP5. Użyj jakiejś pętli, zamiast metody pobierającej następny element, a będzie szybciej.
Dzięki za test, ale zastanawia mnie dlaczego metoda iteratorow trwa dlużej niż opendir?
Czyli wszystko tylko nie glob? :P
bardzo przyjemny artykuł.
Zrobiłem mały benchmark i wstępnie powiem jedynie, że funkcja glob zwraca "katalog/nazwapliku" zamiast "nazwapliku", tak jak robiły to inne metody.
Teraz tak:
numer_metody)czas1/czas2/czas3
1)0.018 s./0.016 s./0.016 s.
2)0.020 s./0.020 s./0.019 s.
3)0.018 s./0.018 s./0.018 s.
4)0.019 s./0.018 s./0.018 s.
5)0.199 s./0.128 s./0.195 s.
Sami sobie to zinterpretujcie :)
ps. Zauważyłem, że scandir (4. metoda) podaje pliki w odrobinę innej kolejności co pozostałe, natomiast glob (5) nie wypisał mi pliku .htaccess
?false !==? ???
(poprawiłem)
// no tak, mea kupa [wstyd]
haha, wlasnie w TEJ chwili nad tym pracuje ale nieco bardziej funkcjonalne
kod napisany przez jakiegos goscia, przerobiony przez flabre, kolorki by ovo i teraz ja w tym grzebie :)
Jojersztajner - jesli nie masz pewnosci to nie zmieniaj artow, bo z dobrego kodu zrobiles bledny.
Dowod? Poczytaj dokumentacje - to, co zmieniles jest wytluszczone w uwadze do tej funkncji.
Cofnalem zmiany.
jojersztajner: tak, ten kod był dobry...