[PHP] Erreur : Cannot modify header information : headers already sent by
Développement PHP / MySQL ☄ 25L’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 :
- 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)
- 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. - 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 !
25 commentaires sur ce post
AddType x-mapp-php5 .phpEnsuite, essaie le formidable tutoriel de Neovov sur l'encodage UTF-8