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).

147
demandé sur MirroredFate 2013-08-14 22:24:22

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.

Rasmus rend assez clair:

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

334
répondu jszobody 2018-02-13 21:03:21

Avec Ubuntu:

sudo apt-get install php5-json
sudo service php5-fpm restart
14
répondu David 2014-03-24 19:51:02

Solution pour les utilisateurs de lampes:

apt-get install php5-json
service apache2 restart

Source

8
répondu milkovsky 2014-03-11 23:32:02

Le module a été installé mais le lien symbolique n'était pas dans /etc/php5/cli/conf.d

1
répondu NicoMinsk 2016-07-29 11:46:30

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)
1
répondu Carl Hinton 2017-05-16 10:37:37

Si vous utilisez phpbrew essayez d'installer json extension pour corriger l'erreur avec undefined fonction json_decode():

phpbrew ext install json
1
répondu yesnik 2017-06-23 21:51:01

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.

1
répondu Rafy 2017-06-25 03:55:58

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

1
répondu jaxxed 2017-06-28 06:38:44