header

(PHP 3, PHP 4 )

header -- Envoie un entête HTTP.

Description

int header (string string)

header() permet de spécifier un entête HTTP lors de l'envoi des fichiers HTML. Reportez vous à HTTP 1.1 Specification pour plus d'informations sur les entêtes HTTP. NB : 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'ai été appelé.

Il y a cependant deux entêtes spéciaux. Le premier est "Location". Non seulement il renvoie un entê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 tous les entêtes qui commencent par "HTTP/" (la casse n'est pas importante). Par exemple, si vous avez votre page d'erreur 404 Apache qui pointent sur un script PHP, c'est une bonne idée que de vous assurez que le script PHP génére une erreur 404. La première chose à 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().