Manuel PHP
header
(PHP 4, PHP 5)
header — Envoie un en-tête HTTP
Description
header() permet de spécifier l'en-tête » HTTP/1.1 Specification pour plus d'informations sur les en-têtes 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.
- <html>
- <?php
- /* Ceci produira une erreur. Notez la sortie si dessus,
- * qui se trouve avant l'appel à la fonction header() */
- header('Location: http://www.example.com/');
- ?>
Liste de paramètres
- string
-
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), vous voulez-vous assurer que le script génère un code statut correct.
- <?php
- header("HTTP/1.0 404 Not Found");
- ?>
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) à 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.example.com/"); /* Redirection du navigateur */
- /* Assurez-vous que la suite du code ne soit pas exécutée une fois la redirection effectuée. */
- exit;
- ?>
- 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 :
- <?php
- header('WWW-Authenticate: Negotiate');
- header('WWW-Authenticate: NTLM', false);
- ?>
- http_response_code
-
Force le code réponse HTTP à la valeur spécifiée.
Valeurs de retour
Aucune valeur n'est retournée.
Historique
| Version | Description |
|---|---|
| 4.4.2 et 5.1.2 | Cette fonction prévient l'envoi de plus d'un en-tête en même temps pour lutter contre les attaques par injection d'en-tête. |
| 4.3.0 | Ajout du paramètre http_response_code . |
| 4.0.4 | Ajout du paramètre replace . |
Exemples
Exemple #1 Boîte de téléchargement
Si vous voulez que vos utilisateur 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.
Exemple #2 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 :
- <?php
- header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
- ?>
Note: 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.
Notes
Note: Depuis 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.
Note: 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é.
Note: Il y a un bogue sous Microsoft Internet Explorer 4.01 qui empêche cet en-tête de fonctionner. Il n'y a pas d'autre solution. Il y a aussi un bogue 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.
Note: Si safe mode est activé, l'UID du script est ajouté à la partie realm des en-têtes WWW-Authenticate que vous envoyez avec cet en-tête.
Note: HTTP/1.1 demande une » 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 $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] et dirname() pour construire vous-même une URI absolue :
Note: 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.
Remonter 
