831 votes

Comment corriger l'erreur "Headers already sent" en PHP ?

Lorsque j'exécute mon script, j'obtiens plusieurs erreurs comme celle-ci :

Avertissement : Impossible de modifier les informations d'en-tête - les en-têtes ont déjà été envoyés par ( la sortie a commencé à /some/file.php:12 ) en /some/file.php sur ligne 23

Les lignes mentionnées dans les messages d'erreur contiennent header() y setcookie() appels.

Quelle pourrait en être la raison ? Et comment y remédier ?

0 votes

0 votes

Assurez-vous qu'aucun texte n'est édité ( ob_start y ob_end_clean() peut s'avérer utile ici). Vous pourriez alors définir un cookie ou une session égale à ob_get_contents() et ensuite utiliser ob_end_clean() pour vider le tampon.

0 votes

Utilisez le safeRedirect dans ma bibliothèque PHP : github.com/heinkasner/PHP-Library/blob/master/extra.php

4voto

Biswadeep Sarkar Points 682

En général, cette erreur se produit lorsque nous envoyons l'en-tête après l'écho ou l'impression. Si cette erreur survient sur une page spécifique, assurez-vous que cette page ne fait pas écho à quoi que ce soit avant d'appeler la fonction start_session() .

Exemple d'erreur imprévisible :

 <?php //a white-space before <?php also send for output and arise error
session_start();
session_regenerate_id();

//your page content

Un autre exemple :

<?php
includes 'functions.php';
?> <!-- This new line will also arise error -->
<?php
session_start();
session_regenerate_id();

//your page content

Conclusion : Ne pas sortir de caractère avant d'appeler session_start() o header() fonctions, pas même un espace ou un saut de ligne.

-2voto

scratte Points 70

Pour toute personne susceptible de m'aider, j'ai trouvé un moyen d'éviter cette erreur en plaçant en haut de chaque contrôleur la déclaration suivante :

$this->_helper->layout->disableLayout(); 

Je n'ai pas pu trouver ce qui ne fonctionnait pas dans mon code qui avait un modèle simple comme celui-ci :

<?php
echo Zend_Json_Encoder::encode($this->object);
?>

Je ne faisais que renvoyer une réponse JSON, donc aucune mise en page n'était nécessaire. Cela fonctionne pour moi !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X