scandir în PHP

Returnează lista fișierelor și directoarelor dintr-un director, sortată alfabetic.

Sintaxă
scandir(string $directory, int $sorting_order = SCANDIR_SORT_ASCENDING, $context = null): array|false

Ce face scandir

scandir citește tot conținutul unui director într-un tablou de nume. Lista conține mereu și intrările speciale . (directorul curent) și .. (directorul părinte), pe care de obicei le elimini.

Rezultatul conține doar nume, nu căi complete. Pentru a filtra după extensie, glob este adesea mai simplu.

Parametri

Parametru Descriere
$directory Directorul citit.
$sorting_order Opțional. SCANDIR_SORT_ASCENDING (implicit), SCANDIR_SORT_DESCENDING sau SCANDIR_SORT_NONE (fără sortare, mai rapid).
$context Opțional. Un context de stream.

Ce returnează

Un tablou cu nume sau false (cu avertisment) dacă directorul nu poate fi citit.

Exemple

Exemplul 1: Conținutul unui director

<?php
mkdir("poze/2025", 0777, true);
touch("poze/munte.jpg");
touch("poze/mare.jpg");

print_r(scandir("poze"));

Rezultat

Array
(
    [0] => .
    [1] => ..
    [2] => 2025
    [3] => mare.jpg
    [4] => munte.jpg
)

Exemplul 2: Fără . și ..

<?php
mkdir("rapoarte");
foreach (["ianuarie", "februarie", "martie"] as $luna) {
    touch("rapoarte/$luna.pdf");
}

$fisiere = array_values(array_diff(scandir("rapoarte"), [".", ".."]));
print_r($fisiere);

Rezultat

Array
(
    [0] => februarie.pdf
    [1] => ianuarie.pdf
    [2] => martie.pdf
)

Exemplul 3: Cel mai nou backup, după nume

Numele cu data în format Y-m-d se sortează corect alfabetic, deci primul element în ordine descrescătoare este cel mai recent.

<?php
mkdir("backup");
foreach (["2026-10-17", "2026-10-19", "2026-10-18"] as $zi) {
    touch("backup/baza-$zi.sql");
}

$lista = scandir("backup", SCANDIR_SORT_DESCENDING);
echo "Cel mai nou: " . $lista[0];

Rezultat

Cel mai nou: baza-2026-10-19.sql

Greșeli frecvente

  • Uiți de . și .. și le prelucrezi ca pe niște fișiere. Elimină-le cu array_diff.
  • Folosești numele direct, fără directorul în față: unlink($nume) în loc de unlink("rapoarte/$nume").

Comenzi înrudite

  • glob: Găsește fișierele ale căror căi se potrivesc cu un tipar, de exemplu poze/*.jpg.
  • opendir / readdir / closedir: Deschide un director pentru a-i citi intrările una câte una, cu readdir, apoi îl închide cu closedir.
  • is_file: Verifică dacă o cale indică un fișier obișnuit (nu un director).
  • is_dir: Verifică dacă o cale indică un director existent.