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
Utilisateur anonyme - 7 janv. 2015 à 23:54
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
- Thunderbird réponse automatique - Guide
- Réponse automatique outlook - Guide
- Le nom du champ de tableau croisé dynamique n'est pas valide ✓ - Forum Excel
- La blague des trois nains réponse - Forum Loisirs / Divertissements
3 réponses
Utilisateur anonyme
7 janv. 2015 à 09:38
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.
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
vendredi 25 avril 2014
Statut
Membre
Dernière intervention
5 juin 2016
7 janv. 2015 à 19:25
7 janv. 2015 à 19:25
il m'a bien renvoyé null
Utilisateur anonyme
7 janv. 2015 à 23:54
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.
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.
7 janv. 2015 à 19:43