Výpis obsahu adresáře
Pokud si chcete otevřít nějakou webovou stránku, zadáváte prohlížeči obvykle pouze adresu serveru a vynecháváte index.htm(l) nebo index.php. Pokud ale server žádný indexový soubor nenalezne, vygeneruje často obsah adresáře zadaného v URL. Většina serverů je však nakonfigurována tak, aby v podobném případě vypisovala hlášení o chybě „Nepovolený přístup/Access Forbidden“. Pokud toto nastavení nemůžete ovlivnit a chcete jej obejít, nabízí se snadné řešení v PHP.
Podobná věc se může hodit také v případě, že si na svůj webový prostor odkládáte i jiná data, která nejsou součástí vaší prezentace. Pokud totiž server nevypisuje obsah adresáře a vy chcete k datům přistupovat, nezbývá, než si pamatovat názvy oněch souborů, což není zrovna praktické. Pokud však vložíte do daného adresáře soubor s následujícím obsahem, pojmenovaný například index.php
(nebo jiným příhodným jménem, pokud se k výpisu obsahu adresáře nemají dostat ostatní uživatelé), máte o starost méně.
|
Činnost skriptu je zřejmá. Nejprve se do pole načtou všechny položky v daném adresáři, které se pak setřídí podle abecedy. V prvním cyklu se vypisují adresáře, v druhém cyklu soubory. Položky se vypisují jako odkazy.
Na obtíž je nutnost vkládat tento soubor do každého adresáře, který chcete zpřístupnit. Pokud chcete vypsat soubory v celém adresářovém stromu, je třeba výše uvedený kód upravit. Definuje se jako funkce GetDirArray()
a ta se pak rekurzívně volá. Soubor lze pojmenovat například tree.php
.
|
Do pole se opět načítají názvy jednotlivých souborů a adresářů, při volání funkce se pole předává odkazem (pro vyšší rychlost zpracování skriptu). V dalším poli se uchovávají informace o tom, zda je daná položka soubor či adresář. Opět následují dva cykly, jeden pro adresáře a jeden pro soubory.
Je nutné mít na paměti, že zpracování tohoto skriptu může trvat i déle než jen pár vteřin, pokud je ve stromu větší počet souborů (stovky, tisíce). Proto je maximální doba provádění skriptu omezena pomocí hodnoty globální proměnné $MAXTIME
v sekundách a při každém průchodu funkcí GetDirArray()
se otestuje, zda nevypršel čas určený pro běh skriptu.
Při tvorbě těchto skriptů jsem využil částí ukázkových skriptů na cz.php.net. Zdrojové kódy obou souborů si můžete stáhnout přímo z Interval.cz.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Umělá inteligence v IT
27. září 2023 -
Gaming na HDR monitoru: Stojí to za to?
12. srpna 2024 -
Jak vybrat doménu: Co je dobré vědět?
2. září 2024
Nejnovější
-
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024 -
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024
Farik
Úno 5, 2010 v 14:43Ahojte, do ktorej casti php mam konkretne dat tuto funkciu ?
Do ktoreho riadku, lebo mi to nefunguje.
FileSize($val);
kubakoumak
Čvn 18, 2011 v 15:57Řazení podle abecedy? Přijde mi to jako řazení podle dvojkové soustavy. Když mam na serveru hudbu označenou 1 – ouvertura, 2 – tango, … Tak to řadí takto: 1, 10, 11, 12, 2, 3, 4,… Chce to trochu dodělat ;-)
Vlado
Úno 8, 2012 v 8:56Keby som chcel usporiadať súbory podľa dátumu (od najnovších po najstaršie), ako by sa mal upraviť príkaz SORT ?
V manuáli cz.php.net sa mi to nepodarilo nájsť.