Problème json
Résolu
leandro95
Messages postés
67
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai un problème je cherche à utiliser file_gets_content() en local (pour des tests):
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.
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.
A voir également:
- La publication a échoué. la réponse n'est pas une réponse json valide.
- Ethernet n'a pas de configuration ip valide - Guide
- Réponse automatique thunderbird - Guide
- Réponse automatique gmail - Guide
- Que cachent les manchots sur la plage pix reponse - Forum Graphisme
- La référence n'est pas valide excel - Forum Excel
3 réponses
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.
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.
leandro95
Messages postés
67
Date d'inscription
Statut
Membre
Dernière intervention
oui ce sont deux fichiers distincts
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.
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.