Apache正在记录PHP Fatal error: Call to undefined function json_decode()
。经过一些谷歌搜索,似乎这个问题是没有最新版本的PHP的结果。奇怪的是,运行php --version
输出
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
清楚地显示我的php
版本大于5.1
。
关于可能导致这种情况的任何想法,或者要找出的步骤?
编辑:脚本回显phpversion的结果是5.5.1-2+debphp.org~precise
编辑:phpinfo()
的结果也是PHP Version 5.5.1-2+debphp.org~precise+2
此外,在phpinfo()
中,它列出了模块JSON和模块作者(Omar Kilani,Scott MacVicar)。
答案 0 :(得分:342)
简短回答:
sudo apt-get install php7.2-json
(或php7.1-json
或php5-json
,具体取决于您正在运行的PHP版本)
当然确保重启Apache :
sudo service apache2 restart
或者如果您使用的是PHP-FPM:
sudo service php7.2-fpm restart
(或php7.1-fpm
或php5-fpm
)
由于许可证冲突,Debian从PHP 5.5rc2开始删除了以前的JSON扩展。
JSON license有一个条款声明:
本软件应用于善,而不是邪恶。
这会导致Free Software Foundation's definition of free software出现问题:
出于任何目的(自由0)自由运行程序。
FSF继续specifically list the JSON license as nonfree。
是的,看起来有点傻。然而,Debian删除了不合规的JSON扩展,而是提供了功能相同的replacement extension。
要明确:PHP本身没有删除JSON,它是still in master。这是发行版/包管理器问题。
我们还没有删除json,我们将永远不会发布没有内置json支持的php版本.5.5中的任何更改都是由于您使用的任何发行版包装,我们无法控制。
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
答案 1 :(得分:15)
使用Ubuntu:
sudo apt-get install php5-json
sudo service php5-fpm restart
答案 2 :(得分:9)
答案 3 :(得分:1)
我有同样的问题:PHP Fatal error: Call to undefined function json_decode()
,但我在Windows下运行php下的cygwin。当我运行php -m
时,我发现没有安装json模块。所以我再次运行cygwin setup.exe,从配置界面检查json包,问题解决了。
答案 4 :(得分:1)
模块已安装但符号链接不在/etc/php5/cli/conf.d
答案 5 :(得分:1)
与7.1相同的问题
apt-get install php7.1-json
sudo nano /etc/php/7.1/mods-available/json.ini
答案 6 :(得分:1)
如果您正在使用phpbrew尝试安装 json 扩展程序来修复错误未定义函数json_decode():
margin-top
答案 7 :(得分:1)
作为 RHEL 8 用户,此问题已通过以下方式修复:
yum install php-json
然后重新加载nginx和php-fpm。所以基本上是默认 php 安装中缺少的 json 库。
这也适用于 CENTOS 8。
答案 8 :(得分:0)
您也可以考虑完全避免使用核心PHP模块。
现在使用guzzle json工具作为PHP应用程序中的库是很常见的。如果您的应用程序是作曲家应用程序,那么将它们作为作曲家构建的一部分包含在内是微不足道的。 如果你告诉PHP自动包含该工具,作为库的guzzle工具将是json工具的交钥匙替代品。
http://docs.guzzlephp.org/en/stable/search.html?q=json_encode#
http://apigen.juzna.cz/doc/guzzle/guzzle/function-GuzzleHttp.json_decode.html
答案 9 :(得分:0)
CENTOS
场景
我在Centos Docker中安装了PHP,这是我的DockerFile:
FROM centos:7.6.1810
LABEL maintainer="teran.a.joan@gmail.com"
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"]
该应用程序返回了json_decode和json_encode相同的错误
解决方案
安装具有json_encode和json_decode的PHP Common
yum install -y php72w-common-7.2.14-1.w7.x86_64
如何找到分辨率?
我还有另一个Docker File,它为API构建了容器,并且它具有安装php-mysql客户端的命令:
yum install php72w-mysql.x86_64 -y
如果我使用这些图像来挂载应用程序,则json_encode和json_decode可以工作!! 好吧.....这有什么依赖性?
[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!
是的!依赖项内部是通用软件包。我将其安装到其他容器中,并且可以使用!之后,我将de指令放入DockerFile中,进行Git提交! Git标签!!! Git Push !!!!准备好了!