O webu
Výpis souborů ze složky

Pro zjednodušení práce se často hodí si PHP skriptem automaticky vypsat obsah složky (typicky třeba pro výpis obrázků a vytvoření galerie). Hodí se k tomu funkce glob. Její výhoda je, že v názvu cesty je možné používat masku.

foreach (glob("soubory/*.jpg") as $soubor) {
    echo $soubor . "<br>\n";
}

Uvedený kód vypíše všechny soubory s příponou JPG v adresáři soubory. Výpis pouze JPG zajišťuje právě výraz „*.jpg“.

Řazení dle názvu

Ve výchozím použití funkce glob zároveň položky abecedně seřadí.

Seřazení podle stáří

Často je ale nutné soubory řadit podle kalendářního data. K tomu stačí jednoduchá vlastní funkce, která porovná filetime (datum změny) souborů.

$soubory = glob("soubory/*.jpg");
// Řazení od nejnovějšího
usort($soubory, function($a, $b) {
  return filemtime($a) < filemtime($b);
});
// Výpis
foreach ($soubory as $soubor) {
  echo $soubor . "<br>\n";
}

V případě, že nechceme vypisovat cestu souboru, nejjednodušší je využít funkci basename:

echo basename($soubor);

Pokud se nemá vypisovat ani přípona, stačí ji uvést do parametru:

echo basename($soubor, '.jpg');

Obrácené řazení

Mají-li se soubory řadit obráceně, existuje několik způsobů, jak toho docílit.

  1. Funkcí array_reverse pole získané funkcí glob s názvy souborů otočit.

    $soubory = array_reverse($soubory);
  2. Ve vlastní funkci pro řazení (v případě, že se k řazení používá datum) otočit nerovnost mezi hodnotami získanými funkcí filemtime.

  3. Místo cyklu foreach použít for, který projede položky od konce.

    Když je kvůli něčemu stejně potřeba zjistit počet souborů, není to o tolik komplikovanější.

    $pocetPolozek = count($soubory);
    for ($i = $pocetPolozek; $i > 0; $i--) {
      echo basename($soubory[$i - 1], ".txt") . "<br>\n";
    }

    Nicméně může tento kód být hůře pochopitelný a je komplikovanější pro změnu řazení, takže bych se mu raději vyhnul.

Databáse?

Vytváření např. fotogalerií pomocí výše uvedeného vypsání složky je dobré předem zvážit. Při rozšiřování takové aplikace velmi brzy narazíme na strop rozšiřitelnosti.

Třeba prostý požadavek na možnost libovolně seřadit obrázky bude čistě se soubory relativně komplikovaný.

Nabízí se tedy rovnou DB použít, pro každý soubor mít záznam v příslušné tabulce a výpisy řešit na úrovni SQL. Skript pro procházení složek se ale může hodit pro prvotní naplnění databáse těmito záznamy.