Dans cet article, nous vous montrerons comment résoudre l’erreur des en-têtes déjà envoyés ( « headers already sent » ) en PHP grâce à une approche pratique !
Si vous êtes un développeur PHP, vous avez probablement rencontré l’erreur « En-têtes déjà envoyés » ( « headers already sent »). Cette erreur survient fréquemment lorsque nous essayons de modifier les en-têtes HTTP après avoir déjà transmis du contenu au navigateur. Heureusement, c’est un problème courant avec plusieurs solutions à notre disposition. Dans cet article, nous allons explorer les raisons de cette erreur et vous indiquer comment la résoudre.
Lorsqu’un serveur Web envoie une page à un navigateur, il divise généralement cette page en deux parties distinctes. Ces parties sont les en-têtes HTTP et le corps de la page.
Les en-têtes HTTP renferment des informations concernant la page. Ces informations cruciales sont le type de contenu, le code d’état, et parfois des données relatives aux cookies.
D’autre part, le corps de la page renferme le code HTML, le CSS et le JavaScript qui permettent au navigateur d’afficher la page à l’utilisateur.
L’erreur « headers already sent » se produit lorsque nous essayons de modifier les en-têtes HTTP après avoir déjà envoyé du contenu au navigateur. Cette situation se produit couramment lorsque nous utilisons des fonctions telles que session_start(), setcookie() ou header() après avoir déjà transmis du contenu au navigateur.
Lorsque l’erreur « En-têtes déjà envoyés » survient, elle s’accompagne généralement d’un message d’erreur précisant le fichier et la ligne où le contenu a été initialement transmis.
Cela constitue une piste cruciale pour résoudre l’erreur. La ligne de code mentionnée dans le message d’erreur indique généralement le point de départ du problème.
Warning: Cannot modify header information - headers already sent by (output started at /Lecoursgratuit/php/exemple.php:12) in /Lecoursgratuit/php/exemple.php on line 23 Dans cet exemple, l’erreur se produit dans le fichier « exemple.php » situé dans le répertoire « /Lecoursgratuit/php/ ». Il y a trois choses à retenir :
La ligne 12 du fichier déclenche l’envoi de contenu, provoquant l’erreur.
Pour résoudre l’erreur, modifiez les en-têtes HTTP avant la ligne 12.
Assurez-vous que les en-têtes sont définis avant l’envoi de contenu.
Plusieurs méthodes permettent de remédier à l’erreur « headers already sent ».
La solution la plus courante implique de s’assurer qu’aucune sortie n’est envoyée au navigateur avant de modifier les en-têtes HTTP.
ob_start(); // active la mise en mémoire tampon de sortie
echo 'Bonjour le monde!';
header('Location: http://www.lecoursgratuit.com'); // cela fonctionnera car la sortie est mise en mémoire tampon
ob_end_flush(); // vide le tampon et envoie le contenu Dans cet exemple, l’appel à ob_start() active la mise en mémoire tampon de sortie, ce qui signifie que la sortie (dans ce cas, « Bonjour le monde! ») est stockée en mémoire tampon au lieu d’être envoyée immédiatement au navigateur.
Cela permet ensuite d’utiliser la fonction header() pour modifier les en-têtes HTTP sans déclencher l’erreur « En-têtes déjà envoyés ». Enfin, ob_end_flush() vide le tampon et envoie le contenu au navigateur.
Dans le cadre de projets PHP de grande envergure, impliquant plusieurs développeurs, voici une astuce précieuse.
PHP vous autorise à ne pas inclure la balise de fermeture (?>) à la fin d’un fichier. Cette pratique est bénéfique car elle empêche d’ajouter involontairement des espaces ou d’autres sorties après la balise de fermeture, ce qui pourrait déclencher l’erreur « En-têtes déjà envoyés ».
Exemple :
<?php
// Code PHP ici
// Pas de balise de fermeture PHP En omettant la balise de fermeture, vous réduisez le risque de problèmes liés aux en-têtes déjà envoyés.
Un entretien d’embauche ressemble rarement à une conversation ordinaire. Derrière des questions en apparence simples…
Préparez efficacement votre entretien commercial avec 140 questions clés et 12 mises en situation concrètes…
Un entretien d’embauche crée souvent une impression particulière. Quelques minutes avant d’entrer dans la salle…
Dans le bâtiment, un devis représente souvent le premier véritable contact entre une entreprise et…
Dans un EHPAD, chaque candidature révèle une manière d’être autant qu’un savoir-faire. Derrière la lettre…
Télécharger des modèles et exemples Word de lettres de motivation pour mutation interne ⬇️ Au…
This website uses cookies.