Headers et headers_sent (Résolu) - PHP - Programmation
Marsh Posté le 04-08-2009 à 14:53:42
es-tu en UTF-8 ? Si oui, tes fichiers sont-ils avec ou sans BOM ?
Marsh Posté le 04-08-2009 à 14:56:24
Bonjour,
Je ne suis pas en UTF-8, et mes fichiers sont (donc) sans BOM.
Marsh Posté le 04-08-2009 à 16:45:51
Bonjour,
Après quelques temps de recherches, il se trouve que dans une fonction appelée avant l'appel a header(), il y avait un flush();.
Après quelques test, il s'avère que le flush() doit envoyer le header() même si aucune information n'est transmise. Fermant ainsi le header (d'ou le warning) mais comme aucune information n'est envoyé(a part le header), la fonction headers_sent($f,$l) ne trouve pas quoi placer dans $f et $l.
Bon a savoir. (d'autant qu'il semblerais que ce ne soit le cas que si php est en mode module Apache et pas an CGI.)
Cordialement.
Adrien.
Marsh Posté le 05-08-2009 à 10:07:24
intéressant, et merci d'avoir donné la solution ...
Marsh Posté le 04-08-2009 à 14:42:53
Bonjour,
Je travail actuellement sur une application relativement complexe (vis a vis de mon expérience dirons-nous) et je suis confronté a une difficulté que je ne comprend pas: le warning "header already sent ..." bien classique.
Dans les situations auxquelles j'ai été confronté par le passé, il s'agissait d'un saut de ligne, espace ou encore un affichage quelconque dans les lignes précédant le header de redirection, mais cette fois, je ne trouve pas. Pour m'aider dans cette recherche, j'ai trouvé sur le net la fonction headers_sent qui permet de vérifier si le header a déjà été envoyé et de récupérer également le fichier et la ligne a laquelle la faute est commise.
Le résultat est que malgré que j'ai supprimé l'ensemble des espaces/sauts de lignes en début et en fin de fichiers (inclus et du fichier concerné) et après avoir vérifié que aucun affichage (echo et autres fonctions) ne s'etait glissé dans mon code avant le header, le warning persiste, mais n'indique pas le fichier ni la ligne, et la fonction headers_sent($f,$l) renvoie true mais $f est null et $l vaut 0.
Je suis sur un serveur WAMP (php5.2.8) et j'ai fais quelques tests: j'ai essayé dans l'ordre:
Les mêmes tests en utilisant la fonction headers_sent($f,$l) de la façon suivante:
ont donné les mêmes résultats.
J'ai alors désactivé l'output buffering de mon php.ini
Les résultats étaient concluant a savoir:
Je n'ai pas réussi a reproduire l'erreur que j'ai sur mon appli a part sur l'appli en elle même (un osCommerce, c'est assez difficile a décortiquer en petits bouts :s )
Avez vous une idée de l'origine de ce problème (a savoir l'envoie de header mais impossible de savoir ou)?
Merci de votre aide.
Message édité par illeriane le 04-08-2009 à 16:46:28