Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 149
fclose(Sfd):
header("Content-Type: application/octet-stream"): headerCContent-Length: Ssize:”):
header("Content-Oisposition: attachment: fi 1ename=$fi1eName"); echo Jcontents:
}
i f(i sSet($_GET['name'])){ i f(!checkF i 1eNamet$_GET['name'])){ echoCNie ma takiego pliku na serwerze!'):
else{
send(S_GET['name']. SfilesPath):
else{
echoCNie ma takiego pliku na serwerze!'):
?>
Znajdująca się na początku skryptu zmienna fi lesPath powinna wskazywać na katalog, w którym są zapisane pliki do pobrania. Główna część kodu rozpoczyna się od sprawdzenia, czy do skryptu został przekazany parametr name. Zadanie to wykonuje wykorzystywana już w poprzednich przykładach funkcja isSet. Jeśli parametr nie został przekazany, jest wyświetlana informacja o braku pliku na serwerze i skrypt kończy działanie. Jeśli parametr name został przekazany, wykonywane są dalsze czynności. W pierwszej kolejności wykonywana jest funkcja checkFil eName; jej zadaniem jest sprawdzenie, czy przekazana do skryptu nazwa należy do pliku, który może zostać pobrany, czyli czy jest ona prawidłowa. Jeśli jest, funkcja zwraca wartość true, w przeciwnym wypadku — wartość fal se. W zależności od wyniku działania funkcji checkFil eName do przeglądarki jest wysyłana informacja o braku pliku lub też, za pomocą funkcji send, zawartość pliku.
Funkcja checkFil eName otrzymuje w postaci argumentu nazwę pliku, która ma zostać zweryfikowana. Wszystkie poprawne nazwy plików, czyli nazwy wszystkich plików, które mogą zostać pobrane z serwera i znajdują się na liście generowanej przez kod HTML z listingu 5.11, są zapisane w tablicy pliki. Wystarczy zatem ustalić, czy nazwa przekazana w postaci argumentu name znajduje się w tej tablicy, czy też nie. To sprawdzenie wykonywane jest za pomocą funkcji array_serach. Pierwszym argumentem tej funkcji jest poszukiwana wartość, a drugim tablica do przeszukania. Ponieważ funkcja array_search zwraca wartość true, jeśli szukana wartość zostanie znaleziona, lub wartość false, w przeciwnym wypadku, wynik jej działania jest jednocześnie wynikiem działania funkcji checkFil eName i jest zwracany za pomocą instrukcji return.
Wysłaniem pliku do użytkownika zajmuje się funkcja send. Otrzymuje ona w postaci argumentów: nazwę pliku oraz nazwę katalogu, w którym ten plik się znajduje. Pierwszym jej zadaniem jest weryfikacja danych, czyli sprawdzenie, czy faktycznie istnieje wskazany plik. Odpowiada za funkcja file_exists, która zwraca wartość true, jeśli plik znajduje się w podanej lokalizacji, lub wartość fal se — w przeciwnym wypadku.