headerEnvoie un en-tête HTTP brut
&reftitle.description;
voidheaderstringheaderboolreplace&true;intresponse_code0header permet de spécifier l'en-tête HTTP
string lors de l'envoi des fichiers HTML.
Reportez-vous à HTTP/1.1
Specification pour plus d'informations sur les en-têtes
HTTP.
N'oubliez jamais que header doit être appelée
avant que le moindre contenu ne soit envoyé, soit par des
lignes HTML habituelles dans le fichier, soit par des affichages
PHP. Une erreur très classique est de lire un fichier avec
include ou
require,
et de laisser des espaces ou des lignes vides, qui produiront
un affichage avant que la fonction header
ne soit appelée. Le même problème existe avec les fichiers
PHP/HTML standards.
]]>
&reftitle.parameters;
header
L'en-tête.
Il y a deux en-têtes spéciaux. Le premier commence par la chaîne
"HTTP/" (insensible à la casse), qui est utilisée
pour signifier le statut HTTP à envoyer. Par exemple, si vous avez configuré
Apache pour utiliser les scripts PHP pour gérer les requêtes vers des fichiers
inexistants (en utilisant la directive ErrorDocument),
assurez-vous que le script génère un code statut correct.
]]>
Le deuxième type d'appel spécial est "Location:".
Non seulement il renvoie un en-tête au client, mais, en plus, il
envoie un statut REDIRECT (302) au navigateur
tant qu'un code statut 201 ou 3xx
n'a pas été envoyé.
]]>
replace
Le paramètre optionnel replace indique
si la fonction header doit remplacer
un en-tête précédemment émis, ou bien ajouter un autre en-tête
du même type. Par défaut, un nouvel en-tête va écraser le
précédent, mais si vous passez &false; dans cet argument, vous pouvez
forcer les en-têtes multiples pour un même type d'en-tête.
Par exemple :
]]>
response_code
Force le code réponse HTTP à la valeur spécifiée. À noter que ce
paramètre a un effet uniquement si header
n'est pas vide.
&reftitle.returnvalues;
&return.void;
&reftitle.errors;
Lors de l'échec de la planification de l'envoi d'un en-tête,
header lève une erreur de niveau
E_WARNING.
&reftitle.examples;
Boîte de téléchargement
Si vous voulez que vos utilisateurs recoivent une alerte pour sauver
les fichiers générés, comme si vous génériez un
fichier PDF, vous pouvez utiliser l'en-tête
Content-Disposition pour
fournir un nom de fichier par défaut, à afficher dans le
dialogue de sauvegarde.
]]>
Directives concernant la mise en cache
Les scripts PHP génèrent souvent du HTML dynamiquement,
qui ne doit pas être mis en cache, ni par le client, ni par les
proxy intermédiaires. On peut forcer la désactivation du
cache de nombreux clients et proxy avec :
]]>
Vous pouvez vous rendre compte que vos pages ne sont jamais mises
en cache même si vous utilisez tous les en-têtes ci-dessus.
Il existe toute une collection de paramètres que les utilisateurs
peuvent modifier sur leur navigateur pour modifier le
comportement par défaut du cache. En envoyant les en-têtes
ci-dessus, vous pouvez imposer vos propres valeurs.
De plus, les paramètres session_cache_limiter et
session.cache_limiter peuvent être utilisés pour
générer les en-têtes de caches corrects, lorsque les sessions sont
utilisées.
&reftitle.notes;
¬e.network.header.sapi;
Vous pouvez utiliser le système de cache (output buffering)
pour contourner ce problème. Tous vos textes générés seront
mis en buffer sur le serveur jusqu'à ce que vous les envoyiez. Vous pouvez
utiliser les fonctions ob_start et
ob_end_flush dans vos scripts, ou en
modifiant la directive de configuration output_buffering
dans votre fichier &php.ini; ou vos fichiers
de configuration du serveur.
Le code statut HTTP doit toujours être le premier à être envoyé au client,
au regard de l'actuel header qui peut être le premier
ou non. Le statut peut être écrasé en appelant header
avec un nouveau statut à n'importe quel moment même si l'en-tête HTTP a
déjà été envoyé.
La plupart des clients moderne accepte des URIs relative comme argument de
Location:,
mais certains client plus ancien exigent une URI absolue
y compris le protocole, l'hôte et le chemin absolu. Vous pouvez généralement
utiliser les variables globales $_SERVER['HTTP_HOST'],
$_SERVER['PHP_SELF'] et dirname pour
construire vous-même une URI absolue :
]]>
L'ID de session n'est pas passé avec l'en-tête Location même si
session.use_trans_sid
est activé. Il doit être passé manuellement en utilisant la constante
SID.
&reftitle.seealso;
headers_sentsetcookiehttp_response_codeheader_removeheader_list
La section sur l'identification
HTTP