Envoie une en-tête HTTP
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.
<?php
header("Location: http://www.php.net/");
/* Redirige le client vers le site PHP */
exit();
/* Assure que le code ci-dessous n'est jamais exécuté. */
?>
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 :
<?php
header("http/1.0 404 Not Found");
?>
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
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du passé
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // toujours modifié
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
?>
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.
<?php
require("user_logging.inc")
?>
<?php
header("Content-Type: audio/x-pn-realaudio");
?>
// Erreur : Notez la ligne blanche ci-dessus
Voir aussi headers_sent().