header

header -- Stuur een raw HTTP header

Beschrijving

int header ( string string [, bool replace [, int http_reponse_code]])

header( ) wordt gebruikt om raw HTTP headers te versturen . Zie de HTTP / 1.1 specificatie voor meer informatie over HTTP headers .

De optionele replace De optionele replace parameter geeft aan of de header een vorige gelijkaardige header moet vervangen , of een tweede header van hetzelfde type toe moet voegen . Standaard zal hij vervangen , maar als je FALSE meegeeft als tweede argument kun je meerdere headeers van het zelfde type forceren . Bij voorbeeld :









 
NTLM'

 
,FALSE)

 
;

 
?





De tweede optionele http_response_code parameter forseert de HTTP reactie code naar de aangegeven waarden . ( Deze parameter is aanwezig in PHP 4.3.0 en hoger . )

Er zijn twee speciale header calls . De eerste is een header die begint met de string " HTTP / " (case is onbelangrijk ) , die wordt gebruikt om uit te zoeken welke HTTP status moet worden verzonden . Bijvoorbeeld , als je Apache hebt geconfigureerd om een PHP script te gebruiken om requests voor ontbrekende bestanden af te handelen ( door de ErrorDocument directive te gebruiken ) , wil je er misschien voor zorgen dat je script de goede status code genereert .




Opmerking : De http status header is altijd de eerste die wordt verstuurd naar de client , of de actuele header( ) nu de eerste aanroep is of niet . De status header kan worden aangepast met het aanroepen van de header( ) met daarin een nieuwe status regel , mits de headers al niet zijn verstuurd naar de client .

Opmerking : In PHP 3 werkt dit alleen als PHP is gecompileerd als een Apache module . Je kunt echter hetzelfde effect verkrijgen door middel van het gebruiken van de Status header .





De tweede speciale case is de " Location : " header . Deze header wordt niet alleen teruggestuurd naar de browser , maar hij geeft ook een REDIRECT ( 302 ) status code aan de browser tenzij een 3xx status code al eerder werd ingesteld .

 
?php

 
header(

 
"Location

 
:

 
http

 
:

 
/

 
/www.php.net

 
/

 
")

 
;

 
/

 
*

 
Stuur

 
de

 
browser

 
naar

 
de

 
PHP

 
website

 
*

 
/

 
exit

 
;

 
/

 
*

 
Zorg

 
dat

 
de

 
code

 
hieronder

 
niet

 
wordt

 
uitgevoerd

 
*

 
/

 
?





Opmerking : HTTP / 1.1 heeft een absolute URI als argument voor Location : , inclusief het schema , de hostname en absoluut pad , maar sommige clients accepteren relatieve URIs . Je kunt normaal $_SERVER[ 'HTTP_HOST' ] , $_SERVER['PHP_SELF' ] en dirname( ) gebruiken om zelf een absolute URI te maken van een relatieve :



PHP scripts genereren vaak dynamische content die niet mag worden gecached door de client browser of een proxy cache tussen de server en de client browser . Je kunt veel proxies en clients kunnen forceren het cachen uit te zetten met





 
Mon

 
,

 
26

 
Jul

 
1997 05:00:00

 
GMT"

 
)

 
;

 
/

 
/

 
Datum

 
in

 
het

 
verleden

 
header("Last-Modified

 
:

 
"

 
.

 
gmdate("D

 
,

 
d

 
M

 
Y

 
H:i:s"

 
)

 
.

 
"

 
GMT")

 
;

 
/

 
/

 
Altijd

 
veranderd

 
header("Cache-Control

 
:

 
no-store

 
,

 
no-cache

 
,

 
must-revalidate")

 
;

 
/

 
/

 
HTTP

 
/

 
1.1

 
header("Cache-Control

 
:

 
post-check=0

 
,

 
pre-check=0"

 
,

 
false)

 
;

 
header("Pragma

 
:

 
no-cache")

 
;

 
/

 
/

 
HTTP

 
/

 
1.0

 
?



Opmerking : Het zou kunnen dat je pagina ' s zelfs niet worden gecached als je niet alle headers hierboven meestuurt . Er zijn een aantal opties die gebruikers zelf kunnen instellen voor hun browser die ervoor zorgen dat hun standaard caching gedrag verandert . Door de bovenstaande headers mee te sturen kun je alle instellingen die anders zorgen dat de output van je script wordt gecached overschrijven .

Bovendien kunnen de session_cache_limiter( ) en de session.cache_limiter configuratie worden gebruikt om automatisch de correcte caching-gerelateerde headers mee te sturen wanneer er sessies worden gebruikt .



Onthoud dat header( ) moet worden aangeroepen voor er output is verzonden , door normale HTML tags , lege regels in een file , of vanuit PHP . Het is een veel voorkomende fout om met include( ) , require( ) , functies , of een andere file toegang functie output te verzenden voordat header( ) wordt aangeroepen . Hetzelfde probleem bestaat wanneer er een enkele PHP / HTML file wordt gebruikt .

 
html

 
?php

 
/

 
/

 
Dit

 
geeft

 
een

 
fout

 
.




 
Let

 
op

 
de

 
output

 
hierboven

 
,

 
/

 
/

 
die

 
voor

 
de

 
header(

 
)

 
call

 
staat

 
.

 
header

 
("Content-type

 
:

 
audio

 
/

 
x-pn-realaudio")

 
;

 
?



Opmerking : In PHP 4 kun je output buffering gebruiken om dit probleem te voorkomen , waarbij het begin van al je output naar de browser wordt gebuffered op de server tot je het verzendt . Je kunt dit doen door ob_start( ) en ob_end_flush( ) aan te roepen in je script , of door de output_buffering instelling in je php.ini of je server configuratie files in te stellen .



Als je wil dat de gebruiker wordt gevraagd de data die je zendt op te slaan , zoals een gegenereerd PDF bestand , kun je de Content-Disposition header gebruiken om een standaard filenaam mee te geven en de browser te forceren de opslaan dialoog te laten zien .

 
?php

 
/

 
/

 
We

 
gaan

 
een

 
PDF

 
outputten

 
header(

 
"Content-type

 
:

 
application

 
/

 
pdf")

 
;

 
/

 
/

 
De

 
PDF

 
die

 
we

 
gaan

 
outputten

 
heet

 
downloaded.pdf

 
header("Content-Disposition

 
:

 
attachment

 
;

 
filename=downloaded.pdf")

 
;

 
/

 
/

 
De

 
PDF

 
source

 
is

 
in

 
original.pdf

 
readfile("original.pdf")

 
;

 
?



Opmerking : Er is een bug in Microsoft Internet Explorer 4.01 die ervoor zorgt dat dit niet werkt . Er is niks aan te doen . Er is ook een bug in Microsoft Internet Explorer 5.5 dat hiermee problemen veroorzaakt . Deze kan worden opgelost door up te graden naar Service Pack 2 of later .



Opmerking : Als safe mode is geactiveerd dan zal het uid van het script worden teogevoegd aan het realm gedeelte van de WWW-Authenticate header als deze wordt geset met deze functie ( wordt gebruikt voor HTTP autenticatie ) .

Zie ook : headers_sent( ) , setcookie( ) , en de sectie over HTTP authenticatie .