PHP erreur fatale: appel à la fonction indéfinie JSON decode()
Apache se connecte PHP Fatal error: Call to undefined function json_decode()
. Après quelques recherches sur Google, il semble que ce problème soit le résultat de ne pas avoir la dernière version de php. Curieusement, en cours d'exécution php --version
ouputs
PHP 5.5.1-2+debphp.org~precise+2 (cli) (built: Aug 6 2013 10:49:43)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.2-dev, Copyright (c) 1999-2013, by Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
Montrant clairement que ma version php
est supérieure à 5.1
.
Des idées sur ce qui pourrait causer cela, ou les mesures à prendre pour le savoir?
EDIT: le résultat d'un script faisant écho à phpversion est 5.5.1-2+debphp.org~precise
EDIT: le résultat de phpinfo()
est aussi PHP Version 5.5.1-2+debphp.org~precise+2
En outre, dans le phpinfo()
, Il répertorie les module JSON et les auteurs du module (Omar Kilani, Scott MacVicar).
8 réponses
Utilisation D'Ubuntu?
Réponse courte:
sudo apt-get install php7.2-json
(ou php7.1-json
ou php5-json
selon la version de PHP que vous utilisez)
Puis, bien sûr, assurez-vous de redémarrer Apache:
sudo service apache2 restart
Ou si vous utilisez PHP-FPM:
sudo service php7.2-fpm restart
(Ou php7.1-fpm
ou php5-fpm
)
Explication
Debian a supprimé L'extension JSON précédente à partir de PHP 5. 5rc2 en raison d'un conflit de licence.
La licence JSON a une clause qui États:
Le logiciel doit être utilisé pour le bien, pas le mal.
Cela pose un problème avec la définition de Free Software Foundation du logiciel libre {[31] } qui stipule:
La liberté d'exécuter le programme, à quelque fin que ce soit (liberté 0).
La FSF continue sur liste spécifiquement la licence JSON comme non libre .
Oui, il semble un peu stupide. Néanmoins, Debian a supprimé l'extension JSON non conforme, et à la place offert une extension de remplacement {[31] } fonctionnellement équivalente.
Pour être clair: PHP lui-même n'a pas supprimé JSON, c'est toujours en maître . Il s'agit d'un problème de distribution / gestionnaire de paquets.
Nous n'avons pas supprimé json et nous ne publierons jamais une version de php sans le support JSON intégré. Tout changement dans 5.5 est dû à tout emballage distro que vous utilisez que nous n'avons aucun contrôle plus.
Plus de détails
Http://iteration99.com/2013/php-json-licensing-and-php-5-5/
Http://liorkaplan.wordpress.com/2013/06/01/bye-bye-non-free-php-json-extension/
Https://bugs.php.net/bug.php?id=63520
Http://philsturgeon.co.uk/blog/2013/08/fud-cracker-php-55-never-lost-json-support
Avec Ubuntu:
sudo apt-get install php5-json
sudo service php5-fpm restart
Le module a été installé mais le lien symbolique n'était pas dans /etc/php5/cli/conf.d
Le même problème avec 7.1
apt-get install php7.1-json
sudo nano /etc/php/7.1/mods-available/json.ini
- Ajouter json.so vers le nouveau fichier
- ajoutez le lien sym approprié sous conf.d
- redémarrez le service apache2 (si nécessaire)
J'ai la même question: PHP Fatal error: Call to undefined function json_decode()
, mais je lance php sous cygwin sous Windows. Quand j'exécute php -m
, j'ai trouvé qu'il n'y a pas de module json installé. Donc, je lance la configuration cygwin.exe à nouveau, vérifiez le paquet json à partir de l'interface de configuration, et le problème est résolu.
Vous pouvez également envisager d'éviter complètement le module PHP de base.
Il est assez courant d'utiliser les outils JSON guzzle comme bibliothèque dans les applications PHP de nos jours. Si votre application est une application composer, il est trivial de les inclure dans une version composer. L'outil guzzle, en tant que Bibliothèque, serait un remplacement clé en main pour l'outil json, si vous dites à PHP d'autoinclure le outil.
Http://docs.guzzlephp.org/en/stable/search.html?q=json_encode#
Http://apigen.juzna.cz/doc/guzzle/guzzle/function-GuzzleHttp.json_decode.html