[PHP] Jak wyświetlić zawartość katalogu jako linki służące do pobrania plików?
Chcesz pobrać zawartość katalogu i pokazać pliki w postaci linków.
Jeżeli udostępniasz dużo plików do pobrania nie warto ręcznie tworzyć odnośników do każdego z nich. Za pomocą skryptu możesz automatycznie pobrać zawartość katalogu, posortować go i wypisać na ekranie nazwy plików podlinkowane w taki sposób, że od razu można je pobrać z Twojego serwisu.
Mało tego - możesz pokazać tylko wybrane pliki, np. z rozszerzeniem .zip lub innym. Skrypt jest więc bardzo elastyczny i wygodny w użyciu. Zobacz jak wygląda:
<?
$sciezka = "katalog/do/plikow/";
$lista=array();
$katalog = opendir($sciezka);
while ($plik = strtolower(readdir($katalog))) {
if (($plik<>".")&&($plik<>"..")) if(!is_dir($sciezka.$plik))
$lista[]=$plik;
}
closedir($katalog);
sort($lista);
for ($i=0;$i<count($lista);$i++) {
echo "<br><a href=\"/sciezka/$lista[$i]\">$lista[$i]</a>";
}
?>
Dokładny opis jak odczytywać katalog znajdziesz w osobnej poradzie, do której odnośnik znajduje się na końcu tekstu. Zasada skryptu jest niemal taka sama. Odczytujemy katalog, sprawdzamy czy istnieje plik i wypisujemy go na ekran z dodanym linkiem, czyli ścieżką URL do niego.
Ważne jest poprawne określenie katalogów. Zmienna $sciezka na górze skryptu określa ścieżkę do katalogu zapisaną według katalogów znajdujących się na dysku serwera. Z kolei ścieżka z adresu WWW na dole skryptu jest ścieżką, jaką widzi użytkownik w przeglądarce. Pierwsza ścieżka nie musi więc odpowiadać drugiej, a często są to zupełnie inne ścieżki.
Skrypt można łatwo rozbudować o pokazywanie tylko takich plików, które mają rozszerzenia spełniające nasze wymagania, np. chcemy pokazać tylko pliki .zip i .exe:
<?
$sciezka = "./";
$lista=array();
$katalog = opendir($sciezka);
while ($plik = strtolower(readdir($katalog))) {
if (($plik<>".")&&($plik<>"..")) {
if(!is_dir($sciezka.$plik) and eregi("(\.exe|\.zip)",$sciezka.$plik)) {
$lista[]=$plik;
}
}
}
closedir($katalog);
sort($lista);
for ($i=0;$i<count($lista);$i++) {
echo "<br><a href=\"/sciezka/$lista[$i]\">$lista[$i]</a>";
}
?>
Funkcja eregi() filtruje pliki i przepuszcza tylko te, które zawierają podane nazwy. W naszym wypadku są to rozszerzenia plików, ale mogą to być także fragmenty nazw plików.