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).
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
)
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.
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
Avec Ubuntu:
Sudo apt-get install php5-json
Sudo service php5-fpm restart
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
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.
Le même problème avec 7.1
apt-get install php7.1-json Sudo nano /etc/php/7.1/mods-available/json.ini
Le module était installé mais le lien symbolique n’était pas dans /etc/php5/cli/conf.d
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
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!