Bien utiliser les en-têtes en PHP

Ce petit tutoriel est fait pour vous apprendre à bien utiliser les en-têtes (headers en anglais). Nombreux sont les programmeurs qui ne savent pas s'en servir et c'est pourquoi j'ai rédigé ce tutoriel. Ici, je ne vous fournirais pas une liste des en-têtes (quoi que quelques exemples quand même) mais je vous indiquerais comment bien les utiliser en général.

1 commentaire Donner une note à l'article (0)

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

1. Préface

Bonjour à tous !
En étudiant ce tutoriel, vous allez comprendre comment bien utiliser les en-têtes en PHP. Celles-ci sont très utiles en PHP. Mais leur utilisation est très rigoureuse pour des raisons techniques que nous aborderons dans ce tutoriel.
Le fonctionnement des en-têtes étant en rapport direct avec le protocole HTTP, je vais expliquer les quelques notions de celui-ci qui vont vous être utile pour la suite.

2. Présentation des en-têtes

Comment reconnaître les en-têtes PHP ? La majorité est rédigée manuellement grâce à la fonction header()Liens vers la documentation PHP au sujet de la fonction header() dont l'utilisation la plus répandue est la redirection qui est invisible aux yeux de l'utilisateur.

Redirection avec header()
Sélectionnez

header('location:index.php'); // Redirection vers index.php

Cependant, ce n'est pas la seul fonction "en-têtes" (ce serais trop facile sinon ^^). Il en existe d'autres.
Il s'agit des fonctions session_start()Lien vers la documentation PHP au sujet de la fonction session_start() et setcookie()Lien vers la documentation PHP au sujet de la fonction setcookie().
Pour ceux qui ne le sauraient pas, session_start() sert à créer une session ou à restaurer celle qui est déjà sur le serveur et setcookie() sert à envoyer un cookie à l'utilisateur.

3. Que faire pour bien utiliser les en-têtes ?

Pour bien utiliser les en-têtes, il faut respecter la règle suivante :

Toujours placer les fonctions en-têtes avant toute sortie vers le navigateur.

Bon alors l'expression "sortie vers le navigateur" n'est peut être pas très claire pour tout le monde.
Les sorties vers le navigateur sont les fonctions de renvoie de texte (echo, print, ...), le code html, les mises en formes du code (espaces, sauts à la ligne, …).
C'est pourquoi, il est conseillé afin de ne pas avoir de mauvaise surprise de commencer toujours par s'occuper des en-têtes en début de page.

4. Pourquoi de telles mesures ?

Ce n'est pas, contrairement à ce que l'on pourrait penser, une erreur de PHP.
Même si PHP n'est pas parfait, vu le nombre de versions déjà passées, ce genre de problème aurait été réglé.
En fait, c'est le protocole http qui nous force à procéder ainsi.
Je ne vais pas m'amuser ici à vous expliquer le protocole http (je vous ai d'ailleurs mis un lien vers un article sur le protocole http en bas de ce tutoriel) mais sachez que celui-ci se déroule en deux étapes :
La première consiste à faire les échanges d'en-têtes avec le navigateur et la deuxième à envoyer les fichiers au navigateur.
Comme vous pouvez le constater, les en-têtes sont la première étape donc on doit s'en occuper en premier.
Une fois que la deuxième étape a commencé, on ne peut plus revenir à la première.
Vous comprendrez donc que si on envoie des données au client, on est dans la deuxième étape et que donc on ne peut plus s'occuper des en-têtes.

5. Quelques exemples d'utilisation des en-têtes

Voici donc quelques exemples d'utilisations d'en-têtes en PHP pour bien comprende à quoi elles peuvent bien servir. Vous verrez en lisant ces exemples que l'on peut faire de nombreuses choses avec les en-têtes ! Pour commencer, voici encore une fois la redirection :

Redirection avec les en-têtes
Sélectionnez

header('Location:index.php'); //L'utilisateur sera redirigé vers index.php automatiquement et ne pourra rien y changer.

Voici un code vous permettant d'indiquer au navigateur le type de fichier qu'est la page (par exemple fichier audio, jpeg, pdf, ...) :

Indiquer le type de fichier avec les en-têtes
Sélectionnez

header('Content-Type: image/jpeg'); //Indique au navigateur qu'il s'agit d'un fichier jpeg. Celui-ci l'affichera comme un jpeg normal.
//Cette utilisation est très utilie si vous créez des images avec une librairie telle que GD (j'ai mis un lien à la fin à propos de GD).

Voici un code vous permettant de générer une erreur 404 (La page n'existe pas) :

Générer une erreur 404 avec les en-têtes
Sélectionnez

header("HTTP/1.0 404 Not Found");

Et voici pour terminer avec les exemples , voici comment interdire la mise en cache.

Interdire la mise en cache avec les en-têtes
Sélectionnez

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du passé

6. Conclusion

J'espère que ce petit tutoriel vous a plu et que vous êtes maintenant des pros des en-têtes en PHP !
Si vous voyez une erreur dans ce tutoriel, signalez la moi, c'est comme ça qu'on avance.
Voici, pour ceux qui sont intéressés, un article sur le protocole http :
Le Protocole httpLe protocole http
Voici un lien vers un tutoriel à propos de GD :
La manipulation d'images en PHP : librairie GDGD

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur ( http://www.lahacheweb.comLa Hache Web ).