Problème json

Résolu/Fermé
leandro95 Messages postés 67 Date d'inscription vendredi 25 avril 2014 Statut Membre Dernière intervention 5 juin 2016 - 7 janv. 2015 à 06:41
 Utilisateur anonyme - 7 janv. 2015 à 23:54
Bonjour,

J'ai un problème je cherche à utiliser file_gets_content() en local (pour des tests):

<?php
 $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
 echo json_encode($arr);
 header('Content-Type: application/json;');
?>



<?php
$json = file_get_contents('http://localhost/projet/test/index.php');
echo $json;
var_dump(json_decode($json,true));

?>



Celà affiche bien $json ({"a":1,"b":2,"c":3,"d":4,"e":5}) mais pas le var_dump; j'ai essayé de mettre $json entre guillemets simples mais ça ne marche pas quand même.

3 réponses

Utilisateur anonyme
7 janv. 2015 à 09:38
Bonjour

Curieux, chez moi ça marche malgré les erreurs.
J'ai supposé que ce code était en fait réparti dans deux fichiers, le premier étant projet/test/index.php. Est-ce bien le cas ?

La fonction header appelée après le echo . Ceci est interdit et doit absolument être corrigé : header envoie les en-têtes qui doivent absolument être envoyés AVANT les données, donc avant tout 'echo'. Il ne doit pas y avoir non plus d'espace ni de ligne vide avant la balise <?php. En pratique, ça arrive à marcher quand même sur des petits volumes de données parce que PHP bufferise l'envoi des données, mais il n'y a aucune garantie la-dessus.

D'autre part, le point virgule à la fin de application/json; est inutile s'il n'y a rien d'autre dans le Content-Type, même si je pense (je ne suis pas sûr) qu'il ne fait pas de mal.

Enfin, la balise ?> à la fin d'un script, surtout s'il s'agit d'envoi de données, est une mauvaise habitude. En effet, cette balise peut être suivie d'espaces ou de lignes vides qui seront envoyées aussi "à l'insu de ton plein gré". Le manuel php recommande de ne pas la mettre :
https://www.php.net/manual/fr/language.basic-syntax.phptags.php

Mettre $json entre guillemets simples, si c'est dans l'appel à json_decode, n'a aucune chance de marcher, car entre guillemets simples, '$json' est une simple chaîne de 5 caractères qui n'a plus aucun rapport avec une variable PHP.

As-tu testé la valeur retournée par json_decode ? Même en cas d'erreur, le var_dump aurait dû afficher NULL.
0
leandro95 Messages postés 67 Date d'inscription vendredi 25 avril 2014 Statut Membre Dernière intervention 5 juin 2016
7 janv. 2015 à 19:43
oui ce sont deux fichiers distincts
0
leandro95 Messages postés 67 Date d'inscription vendredi 25 avril 2014 Statut Membre Dernière intervention 5 juin 2016
7 janv. 2015 à 19:25
il m'a bien renvoyé null
0
Utilisateur anonyme
7 janv. 2015 à 23:54
J'ai reproduit ton problème.
Tu as certainement enregistré tes fichiers en UTF-8 avec BOM, alors qu'il faut les enregistrer SANS BOM.
Le BOM est un caractère (en fait, 3 octets) qui sont mis en début de fichier, et qui sont donc envoyés AVANT ton json_encode. Le file_get_contents les reçoit aussi, et ça fausse le décodage de json_decode.

Il FAUT absolument que les fichiers soient enregistrés SANS BOM, ce qui se fait au niveau de ton éditeur de texte. D'ailleurs, ce BOM pose un tas d'autres problèmes.
0