Jak wyświetlić listę plików z katalogu za pomocą PHP? Nic łatwiejszego! W PHP obsługa systemu plików została maksymalnie uproszczona.
Lista możliwych rozwiązań:
- Korzystając z funkcji opendir i readdir:
$katalog="/ścieżka_do_katalogu/"; $dir = opendir($katalog); while(false !== ($file = readdir($dir))) if($file != '.' && $file != '..') echo $file . '<br />';
- Używając iteratorów (od PHP5):
$katalog="/ścieżka_do_katalogu/"; foreach(new DirectoryIterator($katalog) as $file) if(!$file->isDot()) echo $file->getFilename() . '<br />';
- Korzystając z funkcji scandir:
$katalog='/ścieżka_do_katalogu/'; foreach(scandir($katalog) as $file) if($file != '.' && $file != '..') echo $file . '<br />';
- Wykorzystując klasę dir:
$katalog='/ścieżka_do_katalogu/'; $dir = dir($katalog); while($file = $dir->read()) if($file != '.' && $file != '..') echo $file . '<br />'; $dir->close();
- Za pomocą funkcji glob:
foreach(glob('*', GLOB_BRACE) as $file) if($file != '.' && $file != '..') echo $file . '<br />';
Powyższy kod wyświetli pliki + foldery z obecnego katalogu. Aby pobrać je z folderu “katalog” należy:
foreach(glob('katalog/*', GLOB_BRACE) as $file)
Aby pobrać pliki tylko o określonych rozszerzeniach, np dla: *.jpg i *.gif:
foreach(glob('katalog/{*.jpg,*.gif}', GLOB_BRACE) as $file)
Drobne uwagi do powyższych przykładów:
- zamiast zapisywać ścieżkę dostępu do katalogu w zmiennej ($katalog=”/ścieżka_do_katalogu/”;) można bezpośrednio wpisać ją w funkcję używając apostrofu (”) czyli np:($dir = opendir(‘katalog’);)
- co do “ścieżka_do_katalogu” – należy zwrócić uwagę jak jest wpisywany slash:
- wpisując : katalog/ – wyświetli listę plików w katalogu podrzędnym:(jeśli taki istnieje)
- wpisując : /katalog/ – różnice zobaczymy jeśli pracujemy na wirtualnym serwerze localhost – wpisując w ten sposób php na localhost wyświetli listę plików znajdujących się w katalogu c:\katalog, na serwerze wyświetli listę plików znajdującą się w www.nazwastrony.pl/katalog/ – jest to bezpośrednia ścieżka do katalogu
- wpisując : ../katalog/ – w obu przypadkach wyświetli nam listę plików znajdującą się w katalogu serwera – jest to bezpośrednia ścieżka do katalogu
Inne przykłady zastosowań wyświetlania plików z katalogu:
- Wybieranie losowego pliku z wybranego katalogu:
$folder = opendir('../katalog/');//otwieramy folder do odczytu $i = 0; //wczytanie do tablicy nazwy wszystkich plików z katalogu while(false !=($plik = readdir($folder))){ if($plik != "." && $plik != ".."){ $zmiana[$i]= $plik; $i++; } } closedir($folder);//zamykamy folder //Funkcja rand(), zwraca losową liczbę z podanego w parametrach przedziału. //Natomiast funkcja count() przekazuje liczbę elementów tablicy. $losowy=rand(0,count($zmiana)-1); //wyświetlamy losowy plik echo $zmiana[$losowy];
Dzięki temu przykładowi, można np w łatwy sposób wyświetlać losowe obrazki z danego katalogu: używając przy tym html’a itd..
- wyświetlanie listy plików bez ich rozszerzenia:
$directory="../katalog/"; $dir=opendir($directory); $file_list=""; while($file_name=readdir($dir)) { if(($file_name!=".")&&($file_name!="..")) { //dzielimy nazwę pliku na dwie części za pomocą funkcji explode() $file=explode('.',$file_name); // zachowujemy nazwę w zmiennej $file_list.=$file[0].", "; } } closedir($dir); echo "$file_list";