154 PHP i MySQL dla każdego
Za wygenerowanie listy odnośników odpowiada funkcja printLi st. Plik downloads.txt jest otwierany za pomocą funkcji fopen. Kolejne wiersze tekstu są wczytywane w pętli while za pomocą funkcji fgets i przypisywane zmiennej linę. Ciąg znaków zapisany w 1 i ne jest następnie dzielony na cztery części względem znaków średnika, za co odpowiada funkcja explode. Wynikiem jej działania jest tablica, w której kolejnych indeksach znajdują się kolejne elementy ciągu zapisanego w 1 i ne. I tak pod indeksem 0 znajdzie się identyfikator pliku, pod indeksem 1 — nazwa pliku, pod indeksem 2 — katalog pliku, a pod indeksem 3 — opis pliku. Na podstawie tych danych jest następnie konstruowany odnośnik, poprzedzony znacznikiem <li> odpowiedzialnym za uformowanie elementu listy. Uzyskany ciąg znaków jest wysyłany do przeglądarki za pomocą instrukcji echo.
Skoro opracowaliśmy kod odpowiedzialny za utworzenie listy odnośników pozwalających na pobieranie plików, możemy przystąpić do napisania skryptu zajmującego się wysyłaniem plików. Jego zadaniem będzie: odebranie identyfikatora pliku przekazanego w postaci parametru o nazwie fileid, sprawdzenie, czy plik o takim identyfikatorze faktycznie istnieje, oraz wysłanie pliku do przeglądarki użytkownika. Treść tak działającego skryptu jest widoczna na listingu 5.15.
Listing 5.15. Skrypt wysyłający plik o zadanym identyfikatorze_
<?php
function send($id)
if(!($fd - fopenCdownloads.txt1'.”r"))){ headerCLocation: 404.html"): return:
Jfound - false:
while (!feof ($fd)){
$line = trim(fgets($fd)):
$arr = explode(":". Sline): if(count($arr) -- 4){
1f($id — $arr[0]){
Jfound = true:
$path = $arr[2];
$name = $arr[l]; break:
}
}
if(dtfound) || (!file_exists($path.$name))){ headerC"Locati on: 404.html"): return;
Sfd = fopen(Jpath.Sname, "r"):
Ssize = filesize($path.$name):
Scontents = fread($fd. Ssize);
fclose(Sfd);