Rozdział 5. ♦ Przetwarzanie danych z przeglądarki 145
Klauzula default instrukcji switch zabezpiecza nas przed sytuacją, kiedy w polu error znalazłby się nieznany kod błędu (np. wprowadzony w kolejnych wersjach PHP). Dzięki niej również wtedy zostanie wyświetlona odpowiednia informacja.
Równie ważne jak wysyłanie plików do serwera jest ich przekazywanie przez serwer do przeglądarki. W taką funkcjonalność wyposażonych jest bardzo wiele witryn internetowych, w szczególności udostępniających użytkownikom pliki do pobrania. Realizacja tego typu funkcji wymaga znajomości przynajmniej podstawowych operacji na systemie plików. Zatem osoby nieobeznane z tą tematyką powinny najpierw zapoznać się z informacjami zawartymi w rozdziale 7.
Wysłanie pliku z serwera do przeglądarki nie wymaga wykonania wielu czynności. Najpierw należy wysłać odpowiednio przygotowane nagłówki protokołu HTTP zawierające informacje o pliku, a następnie samą zawartość pliku. Należy skorzystać z nagłówków:
♦ Content-Type — określającego typ MIME danych,
♦ Content-Length — określającego ilość danych (długość pliku),
♦ Content-Di spositlon — określającego rodzaj (przeznaczenie) danych.
Nagłówki wysyła się do serwera za pomocą funkcji header. Nagłówek Content-Type powinien zawierać typ mi me, np. image/gif, my będziemy korzystać z uniwersalnego typu określającego dane binarne: application/octet-stream. Nagłówek Content--Disposition powinien zawierać wartości informujące przeglądarkę, że otrzymuje dane, które mają być traktowane jako załącznik, a niejako treść strony. Ogólnie fragment skryptu wysyłającego nagłówki HTTP będzie miał postać:
header("Content-Type: application/octet-stream''): headert"Content-Length: $size:"):
headerCContent-Disposition: attachment; filename-Sname"):
Zmienna size powinna przy tym wskazywać rozmiar (liczbę bajtów) pliku, a name nazwę pliku, jaka pojawi się w oknie dialogowym, które przeglądarka wyświetli na ekranie z pytaniem, czy użytkownik chce zapisać plik na dysku (rysunek 5.6). Należy pamiętać, aby wykorzystana w tym miejscu zmienna name zawierała samą nazwę pliku, bez ścieżki dostępu. Oczywiście nazwy zmiennych poszczególnych skryptach mogą się zmieniać, zasada pozostaje jednak taka sama.
Po wysłaniu nagłówków trzeba wysłać zawartość samego pliku. Aby to zrobić, należy użyć kilku dodatkowych funkcji. Plik musi zostać otwarty za pomocą funkcji fopen oraz odczytany przy użyciu funkcji fread. Dodatkowo jego wielkość zostanie pobrana przy wykorzystaniu funkcji filesize. Pełny kod skryptu jest widoczny na listingu 5.9. Został