Funkcja header() w PHP
Definicja i użycie
Funkcja header() wysyła oryginalny nagłówek HTTP do klienta.
Zrozumienie, że bardzo ważne jest, aby zwrócić funkcję header() przed wysłaniem jakiegokolwiek rzeczywistego wyjścia (w PHP 4 oraz wyższych wersjach, można użyć buforowania wyjścia, aby rozwiązać ten problem):
<html> <?php // Błąd wyniku // Wcześniej istniała wyjściowa header('Location: http://www.example.com/'); ?>
Gramatyka
header(string,replace,http_response_code)
Parametry | Opis |
---|---|
string | Wymagane. Określa ciąg znaków nagłówka do wysłania. |
replace |
Opcjonalne. Indytuje, czy nagłówek zastępuje poprzedni nagłówek, czy dodaje drugi nagłówek. Domyślnie jest true (zastąpione). false (pozwalanie na wiele takich samych nagłówków). |
http_response_code | Opcjonalnie. Wymuś HTTP kod odpowiedzi na określone wartości (dostępne w PHP 4 i wyższych wersjach) |
Wskazówki i komentarze
Komentarz:Od PHP 4.4, funkcja zapobiega wysyłaniu wielu nagłówków jednocześnie. Jest to środek ochrony przed atakami na wstrzyknięcie nagłówków.
Przykład
Przykład 1
<?php // Data w przeszłości header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-cache"); header("Pragma: no-cache"); ?> <html> <body> ... ...
Komentarz:Użytkownik może ustawić niektóre opcje, aby zmienić domyślne ustawienia przeglądarki dotyczące pamięci podręcznej. Wysyłając powyższe nagłówki, możesz zastąpić te ustawienia, zmuszając przeglądarkę do nie użycia pamięci podręcznej!
Przykład 2
Poinformuj użytkownika o zapisaniu utworzonego pliku PDF (Nagłówek Content-Disposition służy do dostarczenia zalecanego nazwy pliku i zmuszenia przeglądarki do wyświetlenia okna dialogowego zapisu):
<?php header("Content-type:application/pdf"); // Plik będzie nazywał się downloaded.pdf header("Content-Disposition:attachment;filename='downloaded.pdf'"); // PDF źródłowy znajduje się w pliku original.pdf readfile("original.pdf"); ?> <html> <body> ... ...
Komentarz:Microsoft IE 5.5 ma bug blokujący powyższy mechanizm. Aktualizacja do Service Pack 2 lub wyższej wersji rozwiązuje ten bug.