Fonction PHP header_remove() : Tout ce que vous devez savoir
En tant que développeur PHP, vous pouvez avoir besoin de manipuler les en-têtes HTTP. La fonction header_remove() vous permet de les supprimer.
Chaque réponse PHP transporte un ensemble d'en-têtes HTTP — les métadonnées que le navigateur lit avant d'afficher le contenu de votre page (type de contenu, règles de mise en cache, cookies, redirections, etc.). Il arrive que vous définissiez un en-tête au début d'un script et décidiez plus tard qu'il ne doit pas être envoyé. header_remove() est la fonction intégrée qui retire un en-tête de la réponse sortante avant qu'elle ne soit transmise au client.
Ce chapitre couvre la syntaxe, le paramètre optionnel, les conditions dans lesquelles la suppression fonctionne, et les raisons courantes pour lesquelles vous pourriez l'utiliser.
Ce que fait header_remove()
header_remove() supprime un en-tête précédemment mis en file d'attente avec header() (ou défini automatiquement par PHP) de la liste des en-têtes qui seront envoyés avec la réponse. Comme PHP met les en-têtes en mémoire tampon jusqu'au début de l'envoi du corps, vous pouvez les ajouter et les supprimer librement jusqu'à ce moment-là.
La fonction agit sur la liste des en-têtes sortants, et non sur les en-têtes de la requête reçus du navigateur par votre script.
Syntaxe
header_remove(?string $name = null): void$name— le nom de l'en-tête à supprimer (insensible à la casse, sans les deux-points ni la valeur), par exemple"X-Powered-By". Le paramètre est optionnel. Si vous l'omettez (ou passeznull), tous les en-têtes définis jusqu'ici sont supprimés.- Valeur de retour — aucune (
void).
Supprimer un seul en-tête
<?php
header("X-MyHeader: Hello World!");
header_remove("X-MyHeader");Ici, l'en-tête X-MyHeader est mis en file d'attente puis supprimé, de sorte qu'il n'atteint jamais le navigateur. Le nom de l'en-tête est comparé sans tenir compte de la casse, donc header_remove("x-myheader") supprimerait le même en-tête.
Supprimer tous les en-têtes
Appelez la fonction sans argument pour effacer tous les en-têtes que vous avez mis en file d'attente :
<?php
header("X-First: 1");
header("X-Second: 2");
header_remove(); // both X-First and X-Second are droppedCela efface également les en-têtes que PHP ajouterait normalement (comme X-Powered-By, s'il est activé), ce qui est l'une des utilisations les plus courantes en pratique — supprimer l'empreinte du serveur avant le début de la sortie.
Quand la suppression fonctionne
Les en-têtes ne peuvent être modifiés qu'avant l'envoi d'une quelconque sortie. Dès que le premier octet du corps quitte le script — via echo, print, un espace blanc avant <?php, ou une balise fermante ?> suivie d'une ligne vide — les en-têtes sont envoyés et verrouillés.
Utilisez headers_sent() pour vérifier s'il est encore possible de modifier les en-têtes, et headers_list() pour inspecter les en-têtes actuellement en file d'attente :
<?php
header("X-Debug: on");
if (!headers_sent()) {
header_remove("X-Debug");
}
print_r(headers_list()); // X-Debug is no longer in the listSi la sortie a déjà commencé, header_remove() ne fait rien et PHP émet un avertissement « headers already sent », tout comme le ferait header().
Cas d'utilisation courants
- Masquer l'empreinte du serveur. Supprimez
X-Powered-Bypour que les réponses n'indiquent pas votre version de PHP. - Annuler un en-tête conditionnel. Mettez en file d'attente un en-tête de mise en cache ou de redirection tôt, puis supprimez-le si une condition ultérieure vous fait changer d'avis.
- Réinitialiser avant une redirection propre. Effacez les en-têtes parasites avant d'émettre un nouveau
header("Location: ...").
Conclusion
header_remove() vous donne un contrôle précis sur la réponse HTTP sortante : passez un nom pour supprimer un seul en-tête, ou appelez-la sans argument pour les effacer tous. Associez-la à headers_sent() et headers_list() afin de ne modifier les en-têtes que lorsque c'est encore permis, et vous pourrez définir avec confiance exactement ce que le navigateur reçoit.