Moderní tvorba webových aplikací

O webu

Výpis souborů ve složce

Jak v PHP vypsat a podle názvu či data seřadit obsah složky.

3 minuty

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.

Související články

Výpis náhodného textu

Jak na stránce náhodně vypsat obrázek, odkaz, reklamu, text nebo cokoliv jiného.

5 minut

Instalace Apache, PHP a MySQL za 30 vteřin

Jak si ve Windows spustit vlastní Apache, PHP a MySQL na svém PC za půl minuty.

7 minut

MySQL přes PDO

PDO je PHP rozhraní pro pohodlnější práci s SQL databásí. Jaké přináší výhody a jak ho používat.

7 minut

Upload obrovských souborů v JS/PHP

Jak umožnit návštěvníkům nahrát soubory jako videa v řádech MB/GB s progress barem.

7 minut

Web jecas.cz píše Bohumil Jahoda, kontakt
Seznam všech článků
2013–2025