150 PHP i MySQL dla każdego
Jeśli plik nie istnieje, do przeglądarki wysyłana jest stosowna informacja i funkcja kończy działanie (wywoływana jest instrukcja return). Jeśli plik istnieje, jest wysyłany za pomocą techniki analogicznej do zaprezentowanej we wcześniejszym przykładzie.
Poprzedni przykład oferował bezpieczne pobieranie plików; nie był jednak wygodny, kiedy ich liczba była duża, bądź też lista plików do pobrania często zmieniała swoją zawartość. Przy każdym dodaniu lub usunięciu pliku wymagał bowiem modyfikacji zarówno kodu HTML generującego listę, jak i kodu funkcji weryfikującej poprawność danych w skrypcie wysyłającym plik do użytkownika. Skoro tak, spróbujmy napisać bardziej uniwersalny kod, który automatycznie uwzględni wszystkie zmiany na liście plików.
Napiszemy dwa współpracujące ze sobą skrypty: index.php i downloadphp. Pierwszy z nich będzie odpowiedzialny za generowanie listy plików, drugi za wysyłanie pliku, o nazwie przekazanej w postaci parametru, do przeglądarki użytkownika. Skrypt index.php będzie pobierał nazwy plików z wybranego katalogu serwera i tworzył z nich znaczniki <a> w schematycznej postaci:
<a href="http://adres.serwera/dom]oad.php?name=nazwa_pliku"> czyli takiej, jak w wyżej zaprezentowanym przykładzie. Kod tego skryptu został przedstawiony na listingu 5.12.
Listing 5.12. Skrypt automatycznie generujący listą plików_
<htm!>
<head>
<title>Lista plików do pobrania</title>
</head>
<body>
<?php
tfilesPath = ''./downloads/": function printList(Spath)
$fd - opendir(Jpath): if(!$fd) return false: while ((Jfile - readdir(Sfd)) !== fa!se){ i f(i s_dir(tpath.$fi 1e)) conti nue: echo(’’<a href=\ "http://127.0.0.1/download. php?name-"): echot"Sfi ie\">$file</a><br>"):
c!osedir($fd):
}
printListdfilesPath):
</body>
</html>
Zmienna fi lesPath powinna wskazywać na katalog, w którym znajdują się pliki, przeznaczone do udostępniania osobom odwiedzającym stronę. Za pobranie listy plików i wysłanie ich do przeglądarki w postaci odnośników odpowiada funkcja printList.