Description
int
header ( string string)
header() permet de spécifier une
en-tête HTTP lors de l'envoi des fichiers HTML. Reportez-vous
à HTTP 1.1 Specification
pour plus d'informations sur les en-têtes HTTP.
Note :
La fonction header() doit être appelée avant la
première balise HTML, et avant n'importe quel envoi de commande
PHP. C'est une erreur très courante que de lire du code avec la
fonction include() ou avec auto_prepend et d'avoir
des espaces ou des lignes vides dans ce code qui produisent un
début de sortie avant que header()
n'ait été appelé.
Il y a cependant deux en-têtes spéciales. Le premier est
"Location". Non seulement il renvoie une en-tête au
client, mais en plus, il envoie un statut de redirection à
Apache. Du point de vue de l'auteur de script, cela importe peu,
mais pour ceux qui connaissent les rouages internes d'Apache, c'est
primordial.
Note :
HTTP/1.1 demande une URI absolue comme argument
de Location:,
y compris le protocole, hôte et chemin absolu. Mais certains
navigateurs acceptent les URI relatives. Vous pouvez généralement
utiliser les variables globales $HTTP_SERVER_VARS['HTTP_HOST'],
$HTTP_SERVER_VARS['PHP_SELF'] et dirname() pour
construire vous-même une URI absolue :
Le deuxième type d'appel spécial regroupe toutes les
en-têtes qui commencent par "HTTP/" (la casse n'est
pas importante). Par exemple, si vous avez votre page d'erreur 404
Apache qui pointe sur un script PHP, c'est une bonne idée
que de vous assurer que le script PHP génère une erreur
404. La première chose à faire dans votre script est :
Note :
En PHP 3, cela ne fonctionne que si PHP est compilé comme
module Apache. Vous pouvez arriver au même au résultat
en utilisant l'entête Status.
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
Note :
Vous pouvez vous rendre compte que vos pages ne sont jamais mises
en cache même si vous utilisez toutes les entê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 entêtes
ci-dessus, vous pouvez imposer vos propres valeurs.
De plus, les paramètres session_cache_limiter() et
session.cache_limiter peuvent être utilisé pour
générer les entêtes de caches corrects, lorsque les sessions sont
utilisées.
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 affichges
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 génèreront
un affichage avant que la fonction header()
ne soit appelée. Le même problème existe avec les fichiers
PHP/HTML standards.
Note :
En PHP 4, 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.
Si vous voulez que vos utilisateur recoivent une alerte pour sauver
les fichiers générés, comme par exemple si vous générez un
fichier PDF, vous pouvez utiliser l'entête Content-Disposition pour
fournir un nom de fichier par défaut, à afficher dans le
dialogue de sauvegarde.
Note :
Il y a un bug sous Microsoft Internet Explorer 4.01 qui empêche
cet entête de fonctionner. Il n'y a pas d'autre solution.
Il y a aussi un bug dans Microsoft Internet Explorer 5.5 qui
interfère avec ceci, mais qui peut être résolu en utilisant
le Service Pack 2 ou plus récent.
Voir aussi
headers_sent(),
setcookie(), et la section sur
l'authentification HTTP .