error_reporting

Eléphant du PHP | 396 Messages

23 janv. 2006, 17:30

Bonjour à tous,

J'ai easyphp 1.7 d'installé pour tester des scripts en local.
J'ai passé l'error_reporting à E_ALL et j'arrive pourtant à faire par exemple :

Code : Tout sélectionner

echo "test"; header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
sans n'avoir aucune alerte.

Est-ce normal?

Eléphant du PHP | 189 Messages

23 janv. 2006, 17:44

Je penses que Oui, Moi non plus je n'ai aucune erreur ....

Eléphant du PHP | 396 Messages

23 janv. 2006, 18:03

Me suis gourré de code...C'est quand les vacances? :x

Ce qui m'etonne en ne donnant aucune alerte c'est ça plutot :

Code : Tout sélectionner

echo "test"; session_start();

Mammouth du PHP | 19672 Messages

24 janv. 2006, 00:26

Que le error_reporting soit à E_ALL ne servira à rien si la directive display_error est à OFF : à vérifier ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 396 Messages

24 janv. 2006, 00:30

Elle est à "on" aussi :?
On est bien d'accord que ce n'est pas normal que rien ne s'affiche?

Mammouth du PHP | 19672 Messages

24 janv. 2006, 00:32

Si tu as modifié les directives, as-tu relancé Apache pour que les nouveaux paramètres soient pris en compte ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 396 Messages

24 janv. 2006, 00:35

Oui, relancé plus d'une fois ^^

Bon et bien ça doit pas venir du serveur mais de mon code (j'inclus des fichiers en amont) où quelque chose doit m'echapper.

Merci pour vos réponses en tout cas.

Mammouth du PHP | 19672 Messages

24 janv. 2006, 00:38

Je ne vois pas trop : je viens de faire le test et je me fais "normalement" jeter immédiatement. :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 396 Messages

24 janv. 2006, 16:11

Alors là, je m'arrache les cheveux...

Dans une simple page php sans rien d'autre avant ou après, voilà ce que j'arrive à faire sans avoir la moindre alerte :shock:

Code : Tout sélectionner

<?php error_reporting(E_ALL); echo error_reporting(); echo "avant > ".session_id()."<br>"; session_start(); echo "apres > ".session_id()."<br>"; ?>

Eléphant du PHP | 396 Messages

24 janv. 2006, 16:17

Bon...

Je soupçonne la version 1.7 d'easyPHP d'être buggée. J'ai mis la 1.8 et les alertes s'affichent bien.

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

24 janv. 2006, 17:13

Va voir dans ton php.ini les options de configuration parlant d'output_buffering. La solution y est.

Eléphant du PHP | 396 Messages

24 janv. 2006, 17:17

J'ai desinstallé la version qui posait problème et le php.ini est parti avec.

Tu peux m'en dire plus stp?

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

24 janv. 2006, 18:14

Roh tu m'as cassé tout mon effet du coup ><
La directive output_buffering :
; Output buffering allows you to send header lines (including cookies) even
; after you send body content, at the price of slowing PHP's output layer a
; bit. You can enable output buffering during runtime by calling the output
; buffering functions. You can also enable output buffering for all files by
; setting this directive to On. If you wish to limit the size of the buffer
; to a certain size - you can use a maximum number of bytes instead of 'On', as
; a value for this directive (e.g., output_buffering=4096).
output_buffering = Off
Quand cette directive n'est pas à "Off", l'output_buffering est automatique. C'est à dire que les entêtes HTTP et le contenu de la page ne sont envoyées que tout à la fin du script. Donc lorsque que tu fais "echo 'bidule';", les entêtes n'ont pas été envoyées, 'bidule' a simplement été ajouté au buffer, et l'appel à une fonction comme session_start() par la suite ne provoque donc pas l'erreur "headers already sent".

Dans ce cas si aucune erreur n'est affiché, c'est simplement parce qu'il n'y en a pas.

Autre conséquence de l'output-buffering : si on fait une terrible erreur de syntaxe ou autre erreur qui tue le script en cours, au lieu d'avoir l'affichage de l'erreur, on aura simplement une page blanche (voire un avertissement du navigateur "le document ne contient aucune donnée").

Eléphant du PHP | 396 Messages

24 janv. 2006, 18:55

Merci naholyr :)

Je connaissais pas.

Juste un truc : ça met tout dans le buffer puis envoie les en-têtes avant le contenu? Ca ordonne en quelque sorte avant l'output?

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

24 janv. 2006, 19:05

Sans output-buffering :
echo "truc"; // envoi des entêtes (content-type, etc...) + envoi de "truc".
echo "bidule"; // envoi de "bidule".
// fin du script
Avec output-buffering :
echo "truc"; // mise en buffer de "truc"
echo "bidule"; // mise en buffer de "bidule"
// fin du script + envoi des entêtes + envoi de "trucbidule"