header

(PHP 4, PHP 5)

headerEnvoie un en-t�te HTTP

Description

void header ( string $string [, bool $replace= true [, int $http_response_code ]] )

header() 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.

<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.

<?php
// Vous voulez afficher un pdf
header('Content-type: application/pdf');

// Il sera nomm� downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// Le source du PDF original.pdf
readfile('original.pdf');
?>

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: Sat, 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 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 $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] et dirname() pour construire vous-m�me une URI absolue :

<?php
/* Redirection vers une page diff�rente du m�me dossier */
$host  $_SERVER['HTTP_HOST'];
$uri   rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>


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.

Voir aussi