Position actuelle: Accueil> Derniers articles> ob_clean () L'en-tête HTTP a été envoyé après avoir effacé le tampon. Que dois-je faire si je rencontre cette situation?

ob_clean () L'en-tête HTTP a été envoyé après avoir effacé le tampon. Que dois-je faire si je rencontre cette situation?

M66 2025-07-04

Dans le développement de PHP, la fonction ob_clean () est utilisée pour effacer le contenu du tampon de sortie, ce qui est très courant dans le débogage et l'optimisation des performances. Cependant, dans certains cas, nous rencontrons le message d'erreur suivant:

 <span><span><span class="hljs-built_in">Warning</span></span><span>: Cannot modify </span><span><span class="hljs-keyword">header</span></span><span> information - headers already sent </span><span><span class="hljs-keyword">by</span></span><span> (output started at /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/script.php:xx) </span><span><span class="hljs-keyword">in</span></span><span> /</span><span><span class="hljs-type">path</span></span><span>/</span><span><span class="hljs-keyword">to</span></span><span>/script.php </span><span><span class="hljs-keyword">on</span></span><span> </span><span><span class="hljs-type">line</span></span><span> xx
</span></span>

Cette erreur invite que même si vous appelez ob_clean () pour effacer le tampon, PHP ne peut toujours pas modifier les informations d'en-tête HTTP. En effet, lorsque PHP envoie une sortie (y compris HTML, espaces ou messages d'erreur, etc.), les informations d'en-tête HTTP seront également envoyées automatiquement. Étant donné que les informations d'en-tête HTTP doivent être envoyées avant le contenu de sortie, si la sortie a démarré, PHP ne peut pas modifier ou envoyer de nouvelles informations d'en-tête.

1. Qu'est-ce qu'un en-tête HTTP?

Les informations d'en-tête HTTP sont des métadonnées importantes transmises dans les demandes et réponses HTTP. Par exemple, la définition de cookies, le saut à d'autres pages ou la définition du contrôle du cache des pages, etc. sont tous réalisés grâce à des informations d'en-tête HTTP.

PHP fournit la fonction d'en-tête () pour modifier ou ajouter des informations d'en-tête HTTP. Cependant, l'appel à cette fonction doit être exécuté avant tout contenu de sortie, sinon l'erreur ci-dessus "En-tête envoyée" se produira.

2. Le rôle de la fonction ob_clean ()

La fonction OB_CLEAN () fait partie de la fonction tampon de sortie PHP, qui est utilisée pour effacer le contenu du tampon de sortie. Habituellement, cette approche peut éviter d'envoyer une sortie à l'avance et d'affecter les paramètres d'en-tête ultérieurs lorsque nous traitons de grandes quantités de données de sortie.

Cependant, après avoir appelé ob_clean () , cela n'affecte pas le contenu qui a été envoyé au navigateur. Si la sortie a été envoyée avant d'appeler ob_clean () , les informations d'en-tête ne peuvent pas être modifiées.

3. Pourquoi l'erreur "tête envoyée" apparaît-elle?

Habituellement, il y a plusieurs raisons à l'erreur "HTTP Header Send":

  • PHP sortit du contenu (par exemple: balises HTML, espaces, messages d'erreur, etc.) au début du script ou avant le démarrage.

  • La fonction ECHO ou PRINT a été utilisée pour produire le contenu à l'avance.

  • Il y a des espaces ou des ruptures de ligne supplémentaires avant et après le script PHP.

Qu'il s'agisse de sortie HTML ou de tout type de sortie de texte, il entraînera automatiquement des en-têtes HTTP, de sorte que les modifications d'en-tête ne peuvent pas être effectuées après la sortie.

4. Solution

4.1 Assurez-vous qu'il n'y a pas de sortie à l'avance

Vérifiez vos scripts PHP pour vous assurer qu'il n'y a pas de sortie avant d'appeler la fonction en-tête () . La sortie peut inclure:

  • Tags HTML

  • Contenu de l'écho ou de la fonction d'impression

  • Message d'erreur non transformé

  • Caractères d'espace ou rupture de ligne avant le début du script (comme les espaces avant et après le début du fichier ou de la balise fermée)

4.2 Appeler la fonction ob_start ()

Pour éviter le problème de tampon de sortie, vous pouvez appeler ob_start () au début du script. Cela garantit que PHP tamponne tout le contenu de sortie et envoie la sortie en même temps à la fin du script, en évitant l'erreur envoyée en en-tête HTTP.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Location: https://www.example.com'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">ob_clean</span></span><span>();
</span><span><span class="hljs-comment">// Votre logique de code</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// Le contenu du tampon de sortie</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

4.3 Utilisez ob_end_clean () pour effacer le tampon

Semblable à ob_clean () , ob_end_clean () effacera le contenu du tampon actuel et fermera le tampon. Il empêche l'envoi du contenu du tampon au client, garantissant que les paramètres d'en-tête HTTP ultérieurs ne sont pas affectés.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: text/html; charset=UTF-8'</span></span><span>);
</span><span><span class="hljs-comment">// Effacer le tampon et fermez-le</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();
</span><span><span class="hljs-comment">// Continuer à traiter le script</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

4.4 Dépannage des erreurs de sortie

Si l'erreur persiste, vous pouvez localiser le problème en recherchant toutes les sources de sortie. Assurez-vous que le script n'a pas de sortie inattendue avant d'appeler la fonction en-tête () . Vous pouvez aider à dépanner le mode de débogage, la journalisation et d'autres moyens.

5. Résumé

OB_CLEAN () est très efficace pour prévenir les erreurs "En-tête d'en-tête" lors de la compensation du tampon de sortie. Mais cela ne fonctionne que pour le contenu qui n'a pas été envoyé au navigateur. Si PHP a envoyé la sortie avant d'appeler Header () , l'erreur se produira toujours. Ces problèmes peuvent être effectivement évités en appelant ob_start () au début du script pour activer la tampon de sortie et en s'assurant qu'il n'y a pas de sortie de contenu à l'avance.

Comprendre et correctement l'utilisation du mécanisme de tampon de sortie de PHP vous aidera à mieux gérer les en-têtes HTTP et le contenu de sortie, écrivant ainsi des programmes PHP plus robustes et plus efficaces.