developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.
#369 closed enhancement (invalid)
Réponse tronquée si une partie de l'output se fait en dehors de l'objet response
Reported by: | sylvain261 | Owned by: | |
---|---|---|---|
Priority: | low | Milestone: | |
Component: | jelix | Version: | 1.0 beta 3.1 |
Severity: | minor | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Documentation needed: | ||
Hosting Provider: | Php version: |
Description
Je viens de passer pas mal de temps sur un pb assez bête.
J'ai une action qui renvoit du texte à l'aide de jResponseText.
Sur mon serveur de production (et pas en local) mon texte était tjs tronqué d'un caractère.
Après recherche il s'avère qu'une des classes à nous contenait un espace après la fermeture du tag php (?>).
Le truc c'est donc que JResponseText tout comme les autres définit l'en tête HTTP Content-length en fonction de la taille du contenu de la réponse.
Et donc dans mon cas mon navigateur affichait un caractère de moins compte tenu du caractère en trop renvoyé en dehors de l'objet response.
Ça serait bien que Jelix puisse lever une exception ou du moins faire une notice dans ces cas là. Ca éviterai de chercher pendant 3 plombes.
J'ai essayer de le faire moi même en faisant appel à la fonction php headers_sent mais elle me renvoie false (alors que je pensais que si l'output était commencé elle renverrait true).
Une solution serait peut être d'utiliser l'output buffering mais j'imagine que ca pourrait avoir des effets de bords.
Change History (3)
comment:1 Changed 13 years ago by Uriel C
comment:2 Changed 13 years ago by sylvain261
- Resolution set to invalid
- Status changed from new to closed
Merci pour la réponse, Effectivement, c'est une bonne pratique que de désactiver l'output buffering sur son serveur quand on utilise Jelix et ça permet d'éviter ce genre de pb. Laurent, je me permet de fermer le ticket :-)
comment:3 Changed 13 years ago by laurentj
ce qui est possible de faire également, c'est de ne pas mettre de ?> à la fin du script php, ça évite les sauts de lignes ou espace ajoutés malencontreusement.
header_sent() renverra false si des caractères ont été émis sur la sortie de PHP mais que cette taille ne dépasse pas le buffer défini dans php.ini par la directive output_buffering. Tu n'aurais pas activé cette directive ?
Il faudrait ajouter dans les requirements de mettre output_buffering = Off pour être tranquilles. De toutes façons étant donnée l'utilisation d'un moteur de templates, la sortie d'une page est atomique. Donc output_buffering ne sert à rien (il est utile quand on a des tas de petits echos).
Voir : http://fr.php.net/manual/fr/ref.outcontrol.php