Headers et headers_sent (Résolu)

Headers et headers_sent (Résolu) - PHP - Programmation

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:

  • Faire un simple header de redirection dans les règles -> OK.
  • Emmètre des caractères avant le header -> redirection effectuée tout de même.
  • Emmètre beaucoup de caractères avant le header -> redirection effectuée tout de même.


Les mêmes tests en utilisant la fonction headers_sent($f,$l) de la façon suivante:  
 

Code :
  1. if(headers_sent($f,$l))
  2.  {
  3.   echo('<br />'.$f.'<br />'.$l);
  4.  }
  5.  else
  6.  {
  7.   header('Location: ./catalog/index.php');
  8.  }


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:
 

  • Faire un simple header de redirection dans les règles -> OK.
  • Emmètre des caractères avant le header -> Pas de redirection. + affichage du nom du fichier et de la ligne.
  • Emmètre beaucoup de caractères avant le header -> Pas de redirection.  + affichage du nom du fichier et de la ligne.


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
Reply

Marsh Posté le 04-08-2009 à 14:42:53   

Reply

Marsh Posté le 04-08-2009 à 14:53:42    

es-tu en UTF-8 ? Si oui, tes fichiers sont-ils avec ou sans BOM ?


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 04-08-2009 à 14:56:24    

Bonjour,
Je ne suis pas en UTF-8, et mes fichiers sont (donc) sans BOM.

Reply

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.

Reply

Marsh Posté le 05-08-2009 à 10:07:24    

intéressant, et merci d'avoir donné la solution ... ;)


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed