Mammouth du PHP |
1885 Messages
08 févr. 2005, 04:42
Cette erreur se rencontre lors de lutilisation des sessions, des cookies ou de l'envoi d'en-tête avec header().
Ces fonctions sont un peu spéciales puisqu'elles permettent l'envoi d'en-tête au navigateur (ie. cookie, redirection, etc.)
Spécifications
Ces fonctions exigent de votre part, que le flux de sortie n'aie pas commencé. En d'autre termes qu'aucun texte ne soit envoyé avant leur utilisation. Veillez donc à ne rien envoyer avant ces fonctions. Que ce soit:
- Du code HTML
- Du texte
- Des espaces
- Un retour de ligne
Il vous faut donc commencer votre script directement par la balise PHP (<?php ou <?) Sil vous arrive de rencontrer cette erreur, vérifiez donc qu'aucun texte n'ait été envoyé au navigateur avant votre fonction.
Localisation de la source de l'erreur
Code : Tout sélectionner
Warning: Cannot modify header information - headers already sent by (output started at xxx:yy) in zzz on line aa
Voici comment comprendre le message d'erreur:
- Du texte ou code HTML a déjà été envoyé au navigateur à partir du fichier xxx à la ligne yy.
- La fonction qui a tenté d'envoyer les en-têtes se trouve dans le fichier zzz à la ligne aa.
EasyPHP
Il existe une différence (concernant les entêtes) entre EasyPHP 1.6 et EasyPHP 1.7.

EasyPHP 1.7 active une buffarisation de sortie. C'est à dire qu'elle conserve toute sortie vers le client jusqu'à concurence d'une certaine taille. Or, cela a pour effet qu'aucun texte n'est envoyé vers le client et ce, même si vous faites un echo ou insérer du code HTML. En utilisant header, aucune erreur ne sera générée à cause de cette option. Cependant, cette possiblité est à utiliser avec précaution car ce n'est pas tous les serveurs qui activent la buffarisation de sortie.

EasyPHP 1.6, quant à lui, n'utilise pas cette option. Donc voilà pourquoi vous avez une erreur concernant l'utilisation de header après envoi de contenu, contrairement à EasyPHP 1.7.