scandir

scandir($directory, $sorting_order, $context)

Zwraca tablicę nazw wszystkich wpisów w folderze (plików i podfolderów) razem z „.” i „..”, posortowaną alfabetycznie. Przy błędzie zwraca false z ostrzeżeniem.

Parametry

  • $directory – ścieżka do folderu.
  • $sorting_order – opcjonalny: SCANDIR_SORT_ASCENDING (domyślnie), SCANDIR_SORT_DESCENDING albo SCANDIR_SORT_NONE bez sortowania (szybciej).
  • $context – opcjonalny, kontekst z stream_context_create().

Przykłady

$folder = sys_get_temp_dir() . "/garth-galeria";
mkdir($folder);
foreach (array("b.jpg", "a.jpg", "c.txt") as $n) {
    file_put_contents($folder . "/" . $n, "x");
}
mkdir($folder . "/miniatury");
echo implode(" ", scandir($folder)); // . .. a.jpg b.jpg c.txt miniatury
// bez wpisów . i ..
$entries = array_values(array_diff(scandir($folder), array(".", "..")));
echo count($entries); // 4
// tylko pliki z rozszerzeniem jpg
$photos = array_filter($entries, fn($n) => is_file($folder . "/" . $n) && strtolower(pathinfo($n, PATHINFO_EXTENSION)) === "jpg");
echo implode(", ", $photos); // a.jpg, b.jpg
// malejąco
echo implode(" ", scandir($folder, SCANDIR_SORT_DESCENDING)); // miniatury c.txt b.jpg a.jpg .. .
// brakujący folder: false i ostrzeżenie (tu stłumione przez @)
var_dump(@scandir($folder . "/brak")); // bool(false)
foreach (array("a.jpg", "b.jpg", "c.txt") as $n) {
    unlink($folder . "/" . $n);
}
rmdir($folder . "/miniatury");
rmdir($folder);

Na co uważać

  • Wynik zawiera także „.” (bieżący folder) i „..” (folder nadrzędny). Usuń je, inaczej pętla przetworzy je jako foldery.
  • Zwraca tylko nazwy, nie pełne ścieżki. Dla is_file() i innych funkcji musisz dodać folder.
  • Sortuje według bajtów, nie według reguł języka: wielkie litery są przed małymi, a „ą” jest za „z”. Liczby w nazwach lepiej sortuje natsort().
  • W folderze z tysiącami plików jest wolna. Duże listy przechodź stopniowo przez opendir() i readdir().
  • Zwraca także pliki ukryte (zaczynające się od kropki, na przykład .htaccess).

Powiązane funkcje:
glob()
array_diff()
is_file()
natsort()
opendir()