web-dev-qa-db-fra.com

PHP Erreur fatale: appel de la fonction non définie json_decode ()

Apache enregistre PHP Fatal error: Call to undefined function json_decode(). Après quelques recherches sur Google, il semble que ce problème résulte de l'absence de la dernière version de php. Bizarrement, exécuter php --version sorties

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

Indiquant clairement que ma version php est supérieure à 5.1.

Des idées sur ce qui pourrait causer ceci, ou sur les étapes à suivre 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 également PHP Version 5.5.1-2+debphp.org~precise+2

De plus, dans la phpinfo(), il répertorie le module JSON et les auteurs du module (Omar Kilani, Scott MacVicar).

154
MirroredFate

Utiliser Ubuntu?

Réponse courte:

Sudo apt-get install php7.2-json

(ou php7.1-json ou php5-json en fonction de la version PHP que vous exécutez)

Ensuite, 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'ancienne extension JSON à partir de PHP 5.5rc2 en raison d'un conflit de licences.

La licence JSON a une clause qui dit:

Le logiciel doit être utilisé pour le bien et non pour le mal.

Cela pose un problème avec définition du logiciel libre par la Free Software Foundation qui dit:

La liberté d'exécuter le programme, pour n'importe quel but (liberté 0).

La FSF passe à listez spécifiquement la licence JSON comme non libre .

Oui, cela semble un peu idiot. Néanmoins, Debian a supprimé l’extension JSON non conforme et a proposé un extension de remplacement fonctionnellement équivalent.

Pour être clair: PHP lui-même n'a PAS supprimé JSON, c'est toujours en maître . C'est un problème de distribution/gestionnaire de paquets.

Rasmus le dit très clairement :

Nous n'avons pas supprimé json et nous ne publierons jamais une version de php sans le support json intégré. Tout changement dans la version 5.5 est dû à la distribution que vous utilisez, sur laquelle nous n'avons aucun contrôle.

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=6352

http://philsturgeon.co.uk/blog/2013/08/fud-cracker-php-55-never-lost-json-support

343
jszobody

Avec Ubuntu:

Sudo apt-get install php5-json
Sudo service php5-fpm restart
14
David

Solution pour les utilisateurs de LAMP:

apt-get install php5-json
service Apache2 restart

Source

9
milkovsky

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

phpbrew ext install json
1
yesnik

J'ai la même question: PHP Fatal error: Call to undefined function json_decode(), mais j'exécute php sous cygwin sous Windows. Quand j’exécute php -m, j’ai constaté qu’aucun module JSON n’était installé. Donc, je lance à nouveau cygwin setup.exe, vérifie le package json à partir de l'interface de configuration, et le problème est résolu.

1
Rafy

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 au nouveau fichier
  • Ajouter le lien sym approprié sous conf.d
  • Redémarrez le service Apache2 (si nécessaire)
1
Carl Hinton

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

1
NicoMinsk

vous pouvez également envisager d'éviter le module de base PHP.

Il est assez courant d'utiliser les outils de guzzle json en tant que bibliothèque dans les applications PHP de nos jours. Si votre application est une application composer, il est facile de les inclure dans le cadre d'une construction composer. L'outil d'aide à la gueule, en tant que bibliothèque, serait un remplacement clé en main de l'outil json, si vous dites à PHP de l'inclure automatiquement.

http://docs.guzzlephp.org/fr/stable/search.html?q=json_encode#

http://apigen.juzna.cz/doc/guzzle/guzzle/function-GuzzleHttp.json_decode.html

0
jaxxed

CENTOS

Scène

J'ai installé PHP dans Centos Docker, voici mon DockerFile:

FROM centos:7.6.1810

LABEL maintainer="[email protected]"

RUN yum install httpd-2.4.6-88.el7.centos -y
RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
RUN yum install php72w -y
ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"]

L'application a renvoyé la même erreur avec json_decode et json_encode

Résolution

Installer PHP Commun qui contient json_encode et json_decode

yum install -y php72w-common-7.2.14-1.w7.x86_64

Comment trouver la résolution?

J'ai un autre fichier Docker qui construit le conteneur pour l'API et il a l'ordre d'installer le client php-mysql:

yum install php72w-mysql.x86_64 -y

Si j'utilise ces images pour monter l'application, json_encode et json_decode fonctionnent! Ok ..... Quelles dépendances cela a-t-il?

[root@c023b46b720c etc]# yum install php72w-mysql.x86_64
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirror.gtdinternet.com
 * epel: mirror.globo.com
 * extras: linorg.usp.br
 * updates: mirror.gtdinternet.com
 * webtatic: us-east.repo.webtatic.com
Resolving Dependencies
--> Running transaction check
---> Package php72w-mysql.x86_64 0:7.2.14-1.w7 will be installed
--> Processing Dependency: php72w-pdo(x86-64) for package: php72w-mysql-7.2.14-1.w7.x86_64
--> Processing Dependency: libmysqlclient.so.18(libmysqlclient_18)(64bit) for package: php72w-mysql-7.2.14-1.w7.x86_64
--> Processing Dependency: libmysqlclient.so.18()(64bit) for package: php72w-mysql-7.2.14-1.w7.x86_64
--> Running transaction check
---> Package mariadb-libs.x86_64 1:5.5.60-1.el7_5 will be installed
---> Package php72w-pdo.x86_64 0:7.2.14-1.w7 will be installed
--> Processing Dependency: php72w-common(x86-64) = 7.2.14-1.w7 for package: php72w-pdo-7.2.14-1.w7.x86_64
--> Running transaction check
---> Package php72w-common.x86_64 0:7.2.14-1.w7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
 Package                   Arch               Version                        Repository            Size
========================================================================================================
Installing:
 php72w-mysql              x86_64             7.2.14-1.w7                    webtatic              82 k
Installing for dependencies:
 mariadb-libs              x86_64             1:5.5.60-1.el7_5               base                 758 k
 php72w-common             x86_64             7.2.14-1.w7                    webtatic             1.3 M
 php72w-pdo                x86_64             7.2.14-1.w7                    webtatic              89 k

Transaction Summary
========================================================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 2.2 M
Installed size: 17 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): mariadb-libs-5.5.60-1.el7_5.x86_64.rpm                                    | 758 kB  00:00:00     
(2/4): php72w-mysql-7.2.14-1.w7.x86_64.rpm                                       |  82 kB  00:00:01     
(3/4): php72w-pdo-7.2.14-1.w7.x86_64.rpm                                         |  89 kB  00:00:01     
(4/4): php72w-common-7.2.14-1.w7.x86_64.rpm                                      | 1.3 MB  00:00:06     
--------------------------------------------------------------------------------------------------------
Total                                                                   336 kB/s | 2.2 MB  00:00:06     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:mariadb-libs-5.5.60-1.el7_5.x86_64                                                 1/4 
  Installing : php72w-common-7.2.14-1.w7.x86_64                                                     2/4 
  Installing : php72w-pdo-7.2.14-1.w7.x86_64                                                        3/4 
  Installing : php72w-mysql-7.2.14-1.w7.x86_64                                                      4/4 
  Verifying  : php72w-common-7.2.14-1.w7.x86_64                                                     1/4 
  Verifying  : 1:mariadb-libs-5.5.60-1.el7_5.x86_64                                                 2/4 
  Verifying  : php72w-pdo-7.2.14-1.w7.x86_64                                                        3/4 
  Verifying  : php72w-mysql-7.2.14-1.w7.x86_64                                                      4/4 

Installed:
  php72w-mysql.x86_64 0:7.2.14-1.w7                                                                     

Dependency Installed:
  mariadb-libs.x86_64 1:5.5.60-1.el7_5                php72w-common.x86_64 0:7.2.14-1.w7               
  php72w-pdo.x86_64 0:7.2.14-1.w7                    

Complete!

Oui! À l'intérieur des dépendances se trouvent les packages communs. Je l'ai installé dans mon autre conteneur et ça marche! Après, j'ai mis la directive dans DockerFile, Git commit !! Git Tag !!!! Git Push !!!! Prêt!

0
Joan Teran