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.