tutoriel-php-mysql:php:headers-already-sent-by

Les erreurs Headers already sent by ...

Tous webmasters débutants a rencontré dans sa vie de programmeur PHP, l'erreur Headers already sent by … . Ce genre d'erreur est courant, voici quelques conseils pour les éviter.

Cette erreur ce produit lorsqu'une fonction PHP qui manipule les en-têtes HTTP est envoyé au navigateur du client après le début de l'envoi du contenu de la page HTML.

Toutes les fonctions manipulant les en-têtes HTTP sont susceptibles de provoquer ce type d'erreur. Les plus courantes sont :

  • header()
  • setcookie()
  • session_start()

Les erreurs Headers already sent by … sont donc provoquées par l'envoi du flux destiné a l'affichage de la page web du visiteur par le serveur. Les commandes print, echo, … sont les premiers incriminées, elles doivent être utilisées après les commandes manipulant les en-têtes HTTP. Ensuite une erreur courante et qui passe souvent inaperçue est l'affichage d'espace.

L'exemple ci-dessous va générer une erreur Headers already sent by … , je précise que le code est sans erreur et a première vue la commande echo et après la commande session_start().

Code du fichier index.php :

<?php
include ('constante.php');
session_start();
$_SESSION['affiche'] = BONJOUR;
echo $_SESSION['affiche'];
?>

Et le code du fichier constante.php :

<?php
define ('BONJOUR', 'Bonjour, nous vous souhaitons une bonne journée');
?> 

Le premier script va mettre en session le contenu de la constante BONJOUR puis va l'afficher à l'écran. Pour connaitre le contenu de la constante BONJOUR, le script va aller lire le contenu du script constante.php.

L'erreur Headers already sent by … est provoquée par l'espace se situant après le ?> dans le fichier constante.php. Donc assurez vous toujours qu'il n'y a pas d'espace après le ?> a la fin de vos fichiers ou le mieux est de supprimer tous les ?> en fin de fichier.

  • [27/12/2015] : Article initial
  • tutoriel-php-mysql/php/headers-already-sent-by.txt
  • Dernière modification : 08/10/2019 17:03
  • de 127.0.0.1