[ Pobierz całość w formacie PDF ]
.Na przykład:header( WWW-Authenticate: Negociate );header( WWW-Authenticate: NTLM , FALSE);Drugi argument opcjonalnykod_odpowiedzi_httppozwala narzucić określony kododpowiedzi HTTP.(Argument ten jest dostępny w PHP 4.3.0 i wyższych).Są dwa specjalne wywołania funkcji header.Pierwszym z nich jest każdy nagłówek zaczynający sięod "HTTP/" (wielkość liter nie jest istotna).Nagłówka tego używa się do podania statusu zapytaniaHTTP.Na przykład, jeśli skonfigurowałeś serwer Apache aby używał skryptu PHP do wyświetlaniakomunikatów o brakujących plikach (za pomocą dyrektywyErrorDocument), możesz chciećwypróbować, czy skrypt generuje właściwy kod statusu.Notatka: Status połączenia HTTP zawsze będzie wysłany w pierwszej linii odpowiedzi serwera,niezależnie od kolejności wywołania funkcji header().Aktualnie ustalony status połączenia możezostać nadpisany nowym, wystarczy tylko po raz kolejny wywołać funkcję header().Należy tojednak zrobić, nim nagłówki zostaną wysłane.Notatka: W PHP 3 funkcja ta działa tylko, jeżeli PHP jest skompilowane jako moduł Apache a.Identyczny rezultat do powyższego można uzyskać za pomocą nagłówka Status.header("Status: 404 Not Found");628HTTPDrugim specjalnym wywołaniem funkcji header jest nagłówek "Location:".W tej sytuacji, doklienta wysyłany jest nie tylko ten nagłówek, ale także status przekierowaniaREDIRECT(302), o ileinny status zapytania3xxnie został już wysłany.header("Location: http://www.example.com/"); /* Przekieruj przeglądarkę */exit; /* Upewnij się, że kod poniżej nie zostanie wykonanypo przekierowaniu.*/Notatka: Protokół HTTP 1.1 wymaga bezwzględnego URI w nagłówku Location:(http://www.w3.org/Protocols/rfc2616/rfc2616/rfc2616-sec14.html#sec14.30) włącznie zokreśleniem protokołu, nazwy hosta i bezwzględnej scieżki dostępu, ale niektóre klientyakceptują względne URI.Zwykle używa się $_SERVER[ HTTP_HOST ], $_SERVER[ PHP_SELF ] ifunkcji dirname() by wygenerować bezwględny URI:header("Location: http://".$_SERVER[ HTTP_HOST ]."/".dirname($_SERVER[ PHP_SELF ])."/".$względny_url);Skrypty PHP często służą do generowania dynamiczej treści, która nie może być buforowana przezklienta czy serwer proxy.Pamięć cache (bufor) w większości tych urządzeń da się wyłączyć dzięki:header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // data w przeszłościheader ("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");// ciągle modyfikowanyheader("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1header("Cache-Control: post-check=0, pre-check=0", false);header("Pragma: no-cache"); // HTTP/1.0Notatka: Możesz zaobserwować, że strony nie są buforowane, nawet jeśli nie użyłeś wszystkichww.nagłówków.Jest wiele sposobów, w jakie użytkownicy mogą skonfigurować swojeprzeglądarki, aby zmienić standardowy sposób buforowania.Przez wysłanie powyższychnagłówków, powinno się udać ominąć wszystkie ustawienia pozwalające na zbuforowaniewyniku pracy twojego skryptu.Dodatkowo, session_cache_limiter() i dyrektywa konfiguracyjna session.cache_limiter służądo automatycznego generowania nagłówków związanych z bufurowaniem, kiedy sesje są wużyciu.629HTTPPamiętaj, że header() może być wywoływana jedynie do momentu nim zostanie wysłanajakakolwiek treść, tzn.znaczniki HTML, puste linie lub wynik pracy PHP.Jest to bardzo częsty błąd,gdzie skrypty z funkcjami include(), require() itp.mają spacje albo puste linie przed wywołaniemfunkcji header().Problem ten pojawia się również w skryptach opartych na pojedynczym plikuPHP/HTML.// skrypt nie działa - zauważ puste linie ponad funkcją headerNotatka: W PHP 4 można użyć buforowania wyjścia aby ominąć ten problem.Wszystko, coskrypt wyśle do przeglądarki zostanie zatrzymane na serwerze do momentu, kiedy pojawi sięinstrukcja wysłania danych.Można to zrobić za pomocą funkcji ob_start() i ob_end_flush(), lubustawiając dyrektywę kofiguracyjną output_buffering w pliku php.ini lub w plikachkonfiguracyjnych serwera.Aby użytkownik został monitowany o zapisanie wysyłanych danych, takich jak np.wygenerowanyplik PDF, można użyć nagłówka Content-Disposition (http://www.ietf.org/rfc/rfc2183.txt) aby podaćzalecaną nazwę pliku i zmusić przeglądarkę do wyświetlenia okienka Zapisz jako.<?phpheader("Content-type: application/pdf");header("Content-Disposition: attachment; filename=downloaded.pdf");/*.treść pliku pdf.*/Notatka: W Microsoft Internet Explorer 4.01 jest błąd, który uniemożliwia wykorzystanie tegomechanizmu.Nie ma na to rozwiązania.Błąd, który zahacza o ten mechanizm, jest także wMicrosoft Internet Explorer 5.5, jednak da się go ominąć aktualizując przeglądarkę poprzezService Pack 2 lub pózniejszy.Notatka: Jeśli tryb bezpieczny jest włączony, uid skryptu jest dodane do części realm nagłówkaWWW-Authenticate, jeśli ustawisz ten nagłówek (wykorzystuje się go do autoryzacji HTTP).Patrz także: headers_sent(), setcookie(), i rozdział Autoryzacja HTTP.630HTTPheaders_sent (PHP 3>= 3.8, PHP 4 )ZwracaTRUEjeśli nagłówki zostały już wysłanebool headers_sent ( void) \linebreakheaders_sent() zwracaTRUEjeśli nagłówki HTTP już zostały wysłane, lubFALSEw przeciwnymwypadku.Patrz także: header()setcookie (PHP 3, PHP 4 )Wysyła ciasteczkoint setcookie ( string nazwa [, string wartość [, int data_ważności [, string ścieżka [, string domena [, intbezpieczne]]]]]) \linebreaksetcookie() określa ciasteczko (ang.cookie) do wysłania z nagłówkami HTTP.Ciasteczko musi byćwysłane zanim jakiekolwiek inne nagłówki zostaną wysłane (to jest ograniczenie ciasteczek, niePHP).To wymaga od ciebie umieszczenia wywołań tej funkcji przed znacznikamiczy.Wszystkie argumenty pozanazwasą opcjonalne.Jeśli tylko argument nazwa jest obecny,ciasteczko o takie nazwie zostanie usunięte z klienta.Możesz też opuścić argumenty za pomocąpustego łańcucha ("").Argumentydata_ważności ibezpiecznesą liczbami całkowitymi inie można ich opuścić wstawiając pusty łańcuch.Zamiast niego użyj liczby zero (0).Argumentdata_ważnościjest regularnym uniksowym znacznikiem czasu, takim jak zwracany przezfunkcje time() lub mktime ().Argumentbezpieczneoznacza, że ciasteczko może byćprzekazywane tylko poprzez bezpieczne połączenie HTTPS.Wysłane ciasteczko jest dostępne już przy następnym załadowaniu strony w tablicy$_COOKIE.Wwersjach PHP do 4.1.0 była to tablica$HTTP_COOKIE_VARS.Częste pułapki:" Ciasteczka nie będą widziane do następnego przeładowania strony dla której mają być widoczne." Ciasteczko może być usunięte tylko z tymi parametrami, z jakimi je ustawiono.W PHP 3, wielokrotne wywołania setcookie() w jednym skrypcie wykonywane były w odwrotnejkolejności.Jeśli chcesz usunąć jedno ciastko przed wprowadzeniem kolejnego, powinieneś umieścićwprowadzenie nowego przed usunęciem starego.W PHP 4, wielokrotne wywołania setcookie()wykonywane są we właściwej kolejności.Parę przykładów - jak wysyłać ciasteczka:Przykład 1.setcookie() wysyła przykładowe ciasteczkasetcookie ("TestCookie", $value);setcookie ("TestCookie", $value,time()+3600); /* traci ważność za godzinę */setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);631HTTPAby skasować ciasteczko, należy ustawić datę ważności na datę w przeszłości, co uruchomi wprzeglądarce mechanizm kasowania ciasteczek.A teraz, jak usunąć ciasteczka z poprzedniegoprzykładu:Przykład 2.Kasowanie ciasteczek// ustaw datę ważności na godzinę wsteczsetcookie ("TestCookie", "", time() - 3600);setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto
[ Pobierz całość w formacie PDF ]