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.