Documentation - Erreur PHP « headers already sent »

Erreur PHP « headers already sent »

Solution à l'erreur PHP « headers already sent… »

Vous semblez être nombreux à rencontrer le message d'erreur de ce type :

Warning: Cannot modify header information - headers already sent by (output started at C:\file.php:1) in C:\file.php on line 4)

En fait ce message d'erreur signifie que vous tentez de modifier les en-têtes (headers) d'une page après avoir effectué une sortie vers le navigateur (envoi d'au moins un caractère au navigateur, même un espace). Le code HTML doit toujours être envoyé après la dernière modification sur les en-têtes. Il y a plusieurs raisons possibles à cette erreur.

Sortie avant la balise <?php

À de très nombreuses reprises, vous rapportez le fait que vous n'obtenez aucun affichage. Vous avez simplement un caractère parasite tel qu'un espace placé avant la balise ouvrante <?php ou un retour à la ligne après cette balise.

Code PHP, exemple 1 :
1
2
 <?php
    header('Location: newpage.php');

apparaît correct à vos yeux néophytes, mais après inspection vous noterez un très léger décalage (un simple espace) juste devant la balise <?php.

Code PHP, exemple 2 :
1
2
<?php
    header('Location: newpage.php');

semble également correct, toutefois un simple retour à la ligne provoque le même problème.
Notez qu'un retour à la ligne après la fermeture ?> de la balise PHP produit aussi la même erreur.

Sortie par une fonction dans votre script

PHP fourni de nombreuses fonctions pour afficher les données : echo(), var_dump() et print_r(). Certains pensent que le code (X)HTML n'est pas considéré comme du contenu et le laisse tel quel. Cela provoque toujours une sortie et affiche la même erreur. Un autre cas de confusion possible est lorsque plusieurs erreurs se produisent sur une même page. Dans le cas par exemple d'une notification : un message d'erreur est affiché avant l'envoi des en-têtes et provoque aussi une sortie, vous devez donc désactiver les messages de notification (ce qui de toute façon devrait être le cas sur les serveurs en production.)

L'erreur est provoquée par un fichier externe

Warning: Cannot modify header information - headers already sent by (output started at /home/username/www/includedfile.php:1) in /home/username/www/file.php on line 4)
Ce message vous indique le chemin d'accès au fichier qui a provoqué la sortie, et aussi la ligne suspecte. A l'aide de votre éditeur de code, allez à cette ligne pour l'inspecter et la corriger. Cette erreur est fréquente lors de l'utilisation des fonctions include/include_once ou require/require_once

Lors d'insertions PHP via fichiers externes, il est recommandé de ne pas utiliser la balise fermante ?>. Cela n'affectera en aucune façon votre script, car cette balise est optionnelle dans PHP. Cela permettra également d'éviter une sortie causée par des caractères parasites aux balises (voir ci-dessus). Cette pratique est recommandée pour tous les fichiers qui incluent du PHP, car vous ne devriez pas mélanger les codes (X) HTML et PHP dans vos fichiers à l'exception des  modèles.

 

Source (en anglais)

Ce site est maintenu par l'agence ONLYTECH spécialisée en création de sites e-commerce
Découvrez de nouveaux tutoriaux et ressources pour le développement Web sur www.ressources-du-web.com
L'actualité High-tech et Web sur www.passion-hitech.info