[PHP] Listowanie 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
- .
- $file
KOD:
$katalog = '/home/grzegorz/Pulpit/pliki';
$pokaz = „{*.jpg,*.gif, *.bmp, *.png, *.psd}”;
echo „
- „;
foreach(glob($katalog.’/'.$pokaz, GLOB_BRACE) as $file)
{
if(is_file(„$katalog/$file”))
{
echo „
„;
}
}
echo „
„;
Wszytkie kody zostały przetestowane jednakże w środowisku produkcyjnym mogą zachowywać się inaczej (np. ze względu na ograniczenia nałożone w php.ini) niż pokazano.