L’erreur du jour qui m’a fait frémir : « Warning : Cannot modify header information – headers already sent by  »
Sa cause ? On tente de modifier des entêtes de documents alors que des informations ont déjà été envoyées au client.

Pour avoir passé une demi-heure à chercher des solutions valables, voici le processus à suivre pour résoudre ce problème :

  1. Regarder si aucun echo, espace, ou autre bout de code html n’existe dans le fichier avant toute fonction de modification d’entêtes : (header(), setcookie(), session_start(), et autres)
  2. Dans les fichiers inclus avant l’appel de votre fonction, vérifier qu’aucun espace ne s’est glissé entre des balises PHP.
    Verifier soigneusement le haut de page, avant la premiere balise PHP (<?php), et le bas de page, après la fermeture de la dernière balise PHP.
  3. Il est possible que l’entête X-Powered-By soit envoyée par PHP. Cette entête contenant uniquement la version de PHP utilisée, vous pouvez la désactiver sans crainte : Désactiver X-Powered-By.

Ca ne marche toujours pas ? Toujours une erreur modify header ?
Voici deux solutions, pour deux problèmes différents :

  • Vous n’utilisez que la fonction session_start(), il n’y a rien au dessus.
    Supprimez la fonction session_start();
    Ajoutez cette ligne dans votre fichier .htaccess :
    php_value session.auto_start 1
    Ou ajoutez cette ligne dans votre fichier php.ini :
    session.auto_start 1
    Attention, c’est une méthode qui est déconseillée !
  • Tout a été tenté, rien ne marche ?
    Ajoutez tout en haut du fichier PHP appelé la fonction : ob_start();
    Ajoutez tout en bas du fichier PHP appelé la fonction : ob_end_flush();
    Explication : ob_start va retenir l’envoi de données, et ob_end_flush les liberera 🙂
    Cette « bidouille » permet d’envoyer des cookies en plein milieu d’une page, et d’autres choses pas très nettes 😮 .

J’espère que cet article a pu vous aider à résoudre l’erreur « Cannot modify header information : headers already sent by« .Sinon, je peux toujours vous donner un coup de main dans les commentaires 😉

Edit : une autre solution proposée par le blog Midnight Cafe
Ajoutez cette ligne dans votre fichier .htaccess :
output_buffering on

Edit2 : Dans les commentaires, Gloup évoque le fait que des fichiers en UTF-8 avec BOM peuvent provoquer cette erreur. Il suffit alors de les réencoder en UTF-8 sans BOM !

Tags : , , ,