Erreur d'en-têtes déjà envoyés en PHP
Lors de l'exécution de scripts PHP, vous pouvez rencontrer des erreurs telles que :
Warning: Cannot modify header information - headers already sent by (output started at /some/file.php:12) in /some/file.php on line 23
Copier après la connexion
Cela se produit lorsque les en-têtes HTTP sont a tenté d'être envoyé/modifié après qu'une sortie ait été générée. Des fonctions telles que header(), setcookie() et session_start() nécessitent que les en-têtes soient envoyés avant qu'une sortie ne soit effectuée.
Causes des erreurs d'en-têtes déjà envoyées
Sortie involontaire :
- Espace avant
- Marque d'ordre d'octets UTF-8 (BOM)
- Messages ou avis d'erreur précédents
Sortie intentionnelle :
- Fonctions telles que l'impression, l'écho ou d'autres produisant une sortie
- Sections HTML brutes
Identification de la source de Sortie
Le message d'erreur inclut généralement la ligne où la fonction d'en-tête a été invoquée (par exemple, ligne 23) et la source de la sortie prématurée (par exemple, ligne 12).
Solutions
Évitez les sorties prématurées :
- Utilisez des fonctions et des schémas de modèles pour restructurer l'application flow.
- Assurez-vous que les appels header() sont effectués avant d'écrire des messages ou de rendre la sortie.
Corriger les causes spécifiques :
-
Impression/écho : Utilisez des fonctions comme trigger_error, ob_flush ou var_dump pour gérer sortie.
-
HTML brut : Placez le traitement du formulaire et les conditions de script avant les sections HTML.
-
Espaces : Supprimez les espaces de début ou utilisez de longues balises PHP ( ) au lieu des balises abrégées (=).
- UTF-8 BOM : Configurez votre éditeur de texte pour enregistrer les fichiers au format "UTF-8 (pas de nomenclature)" ou utilisez un éditeur hexadécimal pour supprimer les nomenclatures.
- Espaces de fin après ?>: Omettez les balises de fermeture PHP de fin.
-
Autre : Vérifiez les extensions PHP ou les paramètres php.ini qui peuvent provoquer une sortie implicite.
-
Messages d'erreur : Évitez les erreurs, retardez leur exécution ou supprimez-les à l'aide d'isset() ou @().
Tampon de sortie ( Solution de contournement) :
- Activez la mise en mémoire tampon de sortie en définissant output_buffering dans php.ini ou en utilisant ob_start().
- Utilisez ob_clean() si du contenu binaire est généré.
- Notez que la mise en mémoire tampon de sortie ne remplace pas une structuration appropriée de l'application.
Solutions de secours :
-
Balise méta HTML : Injecter
-
Redirection JavaScript : Utilisez location.replace() ou location.href= pour rediriger clients.
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!