[PHP] Listowanie katalogu

Pomimo popularności baz danych MySQL i PgSQL niektóre dane ze względu na wydajność nadal przechowywane są w postaci plików. Dzisiaj pokażę jak utworzyć listę plików w zadanym katalogu.

Zdjęcia, filmy, programy… zajmują dużo i są danymi binarnymi nieczytelnymi dla człowieka. Bazy danych zostały stworzone do przechowywania danych tekstowych – ich twórcy zaimpletowali mechanizmy pozwalające zapisać każdy typ danych jednakże w/w mechanizmy działają wolno. Ten oto prosty powód zmusza każdego programistę do nauki obsługi plików i katalogów.

W PHP obsługa systemu plików została maksymalnie uproszczona (co nie znaczy „okrojona”).

Istnieje kilka sposobów na zrealizowanie tego zadania. Jednym z najprostszych i najczęściej stosowanych jest funkcja opendir(). Ma ona jednak wady – jest wolna i często blokowana ze względu na bezpieczeństwo serwera.

KOD:

$katalog = ‚/home/grzegorz/Pulpit/pliki’;

$dir = opendir($katalog);

while(false!== ($file = readdir($dir)))

{

if(is_file(„$katalog/$file”))

{

echo $file. ‚
‚;

}

}

Nie zaleca się jej stosowania – zastąpiły ją iteratory dostępne od PHP5.

KOD:

$katalog = ‚/home/grzegorz/Pulpit/pliki’;

foreach(new DirectoryIterator($katalog) as $file)

{

if(!$file->isDot())

{

echo $file->getFilename() . ‚
‚;

}

}

Powyższy kod jest wygodny i prosty do zapamiętania. Ma on jednak jedną wadę – jeśli chcielibyśmy filtrować wyniki np. wg rozszerzenia należałoby użyć funkcji pathinfo() w każdym przejściu pętli a następnie sprawdzić w if`ie czy rozszerzenie ma się pojawić czy też nie.

KOD:

$katalog = ‚/home/grzegorz/Pulpit/pliki’;

$pokaz = array(„jpg”, „gif”, „bmp”, „png”, „psd”);

foreach(new DirectoryIterator($katalog) as $file)

{

if(!$file->isDot())

{

$f = $file->getFilename();

$pathinfo = pathinfo(„$katalog/”.$f);

if(in_array($pathinfo[‚extension’], $pokaz)

{

echo $f. ‚
‚;

}

}

}

Taki kod jest 100% poprawny jednakże długi i mało wydajny. Sprawę można uprościć używając funkcji glob() jak w poniższym przykładzie:

KOD:

$katalog = ‚/home/grzegorz/Pulpit/pliki’;

$pokaz = „{*.jpg,*.gif, *.bmp, *.png, *.psd}”;

foreach(glob($katalog.’/’.$pokaz, GLOB_BRACE) as $file)

{

if(is_file(„$katalog/$file”))

{

echo $file. ‚
‚;

}

}

Listę wyników możemy formatować również za pomocą html – najczęściej używana jest lista

Zamknij

Choć staramy się je ograniczać, wykorzystujemy mechanizmy takie jak ciasteczka, które pozwalają naszym partnerom na śledzenie Twojego zachowania w sieci. Dowiedz się więcej.