developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 12 years ago

Closed 12 years ago

Last modified 12 years ago

#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 12 years ago by Uriel C

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

comment:2 Changed 12 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 12 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.

Note: See TracTickets for help on using tickets.