Page 1 sur 1

Comportement étrange d'un Warning avec json_encode()

Posté : 21 nov. 2012, 14:43
par BehoDouble
En considérant le code suivant dans lequel vous pourrez remplacer 'chemin_de_votre_fichier_de_log' par un chemin de fichier valide :

Code : Tout sélectionner

<?php error_reporting(-1); ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('error_log', 'chemin_de_votre_fichier_de_log'); $data = chr(233); $json = json_encode($data); ?>
Ce code doit normalement générer un Warning car $data n'est pas une séquence UTF-8 valide et que json_encode() n'accepte que de l'UTF-8.
Pourtant ce Warning n'apparaît dans le fichier de log que si on met 'display_errors' à 0 et n'apparaît jamais à l'écran que 'display_errors' soit à 0 ou 1.

Si quelqu'un trouve du sens à tout ça j'aimerais bien qu'on m'explique. :D
Si vous n'avez pas ce problème chez vous ça m'intéresse aussi.

J'utilise WampServer 2.2, PHP 5.3.10 sur Windows 7 SP1 64 bits.

Merci.

Re: Comportement étrange d'un Warning avec json_encode()

Posté : 21 nov. 2012, 14:47
par Saian
C'est pas normal de ne pas voir les warning avec un error_reporting(-1) ?

EDIT
Après lecture de la doc sur error_reporting je comprends le problème (error_reporting(-1) étant rapporter toutes les erreurs) mais de la à l'expliquer qu'elle ne s'affiche jamais à l'écran... j'ai pas un début d'idée pour le moment.

RE-EDIT
Chez moi ça ne génère pas d'erreur, juste que json_encode retourne null (ça expliquerai que tu n'ai jamais d'erreur qui s'affiche à l'écran).
D'ailleurs sur la doc ils disent que ça retourne FALSE quand une erreur survient.
C'est quoi l'erreur que tu arrives à avoir dans ton log ?
Et pour le display_error ça n'agit pas sur mon fichier de log ou les erreurs sont systématiquement reportées. Par contre ça agit bien sur l'affichage à l'écran.

Re: Comportement étrange d'un Warning avec json_encode()

Posté : 21 nov. 2012, 15:08
par Mazarini
J'ai eu des problèmes de paramètres des erreurs et j'ai fini de les régler en testant avec un script genre :
<?PHP
$toto[titi] = $tata;
?>
+ l'utilisation d'une fonction obsolète.

(Edit suite edit précédent)