Maison  >  Article  >  développement back-end  >  Avertissement PHP : Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par - 解决方案

Avertissement PHP : Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par - 解决方案

WBOY
WBOYoriginal
2023-08-19 16:09:062674parcourir

PHP Warning: Cannot modify header information - headers already sent by - 解决方案

Avertissement PHP : Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par - Solution

Dans le processus d'utilisation de PHP pour développer des sites Web, nous rencontrerons parfois le message d'avertissement suivant : Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par (impossible modifier l'en-tête - l'en-tête a été envoyé).

Ce message d'avertissement apparaît généralement lorsque nous essayons d'utiliser la fonction header() pour définir les informations d'en-tête HTTP dans une page Web. La cause première de ce problème est que le contenu affiché vers le navigateur existe déjà avant l'appel de la fonction header(). En d’autres termes, la fonction header() doit être appelée avant toute sortie.

Alors, lorsque nous rencontrons ce problème, comment devons-nous le résoudre ? Voici quelques solutions courantes.

Solution 1 : Vérifiez les caractères d'espacement et la nomenclature

Les caractères d'espacement et la BOM (Byte Order Mark) sont l'une des causes courantes d'erreurs "en-têtes déjà envoyés". Les caractères d'espacement font référence à des caractères tels que des espaces, des nouvelles lignes ou des touches de tabulation au début ou à la fin du fichier PHP. La nomenclature est un ordre d'octets spécial utilisé dans le codage UTF-8 pour marquer le début du fichier. L'existence de ces caractères sera considérée comme un contenu de sortie, empêchant la fonction header() d'être appelée normalement.

Pour résoudre ce problème, nous pouvons ouvrir le fichier PHP correspondant et vérifier s'il y a des caractères vides ou une nomenclature aux positions de début et de fin. Si ces caractères sont trouvés, nous devons les supprimer ou les remplacer.

Solution 2 : éviter d'envoyer l'en-tête avant la sortie

Étant donné que la fonction header() doit être appelée avant toute sortie, lors de l'écriture du code, nous devons faire particulièrement attention à éviter d'envoyer une sortie avant d'appeler la fonction header(). Cela inclut les situations suivantes :

  • Utiliser des fonctions de sortie telles que echo et print dans un fichier PHP
  • Inclure d'autres fichiers dans le fichier PHP, et ces fichiers contiennent des instructions de sortie
  • Une fonction ou une classe est définie dans le fichier PHP, et Ces fonctions ou classes contiennent des instructions de sortie

Pour éviter que cela ne se produise, nous pouvons placer l'appel à la fonction header() au tout début du fichier PHP pour garantir qu'aucune sortie ne se produit. De plus, nous pouvons également déplacer l'instruction de sortie après l'appel de la fonction header() pour éviter d'interférer avec l'appel de la fonction header().

Ce qui suit est un exemple de code qui montre comment utiliser correctement la fonction header() :

<?php
ob_start();
// 开启输出缓冲区

header('Content-Type: text/html; charset=utf-8');
// 设置HTTP头信息

// 其他代码...
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>示例页面</title>
</head>
<body>
    <!-- 页面内容... -->
</body>
</html>

<?php
ob_end_flush();
// 输出缓冲区内容,并关闭输出缓冲区
?>

En utilisant les fonctions ob_start() et ob_end_flush(), nous pouvons mettre en mémoire tampon tout le contenu de sortie jusqu'à ce que l'appel de la fonction header() soit terminé. Puis sortie.

Résumé :

Lors du développement d'un site Web PHP, le message d'avertissement "Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par" est un problème courant. Pour résoudre ce problème, nous pouvons le faire en vérifiant la présence de caractères d'espacement et de nomenclature, et en évitant d'appeler la fonction header() avant la sortie. J'espère que ces solutions vous aideront!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn