PHP致命错误:调用未定义函数json_decode()


165

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


4
检查disable_functionsini指令以查看是否json_decode在该列表中
Orangepill 2013年

json模块会显示在您的phpinfo()输出中吗?
tcmitche 2013年

disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_ge\ t_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MirroredFate 2013年

Ubuntu 12.04有一个软件包:php-services-json。也许这有帮助...
jgb

1
@jgb这是PEAR包Services_Json。这也很有用,它解析了一点Javascript,甚至不只是JSON。但是还有其他的Userland实现可以直接重新实现json_decode
2013年

Answers:


354

使用Ubuntu?

简短答案:

sudo apt-get install php7.2-json

(或php7.1-jsonphp5-json取决于你正在运行的PHP版本)

然后当然要确保重新启动Apache

sudo service apache2 restart

或者,如果您使用的是PHP-FPM:

sudo service php7.2-fpm restart

(或php7.1-fpmphp5-fpm

说明

由于许可证冲突,Debian从PHP 5.5rc2开始删除了先前的JSON扩展。

JSON许可证具有规定的条款:

该软件应用于善良,而非邪恶。

这导致自由软件基金会对自由软件的定义出现问题,该定义指出:

出于任何目的运行程序的自由度(自由度0)。

FSF继续专门列出了JSON许可证为nonfree

是的,这似乎有点愚蠢。尽管如此,Debian删除了不兼容的JSON扩展,而是提供了功能上等效的替代扩展

需要明确的是:PHP本身尚未删除JSON,但仍在master中。这是发行版/程序包管理器问题。

Rasmus明确指出

我们没有删除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


我回过头来提到,似乎5.5.0很好JSON,只是5.5.1中断了。
MirroredFate 2013年

2
5.5.3也没有(Ubuntu 13.10)
Luis Lobo Borobia

9
使用Chris提到的命令安装json模块后,不要忘记重新启动apache。
帕维尔

1
如果php-json是php-common的依赖项,那么一切都会消失... bugs.launchpad.net/ubuntu/+source/ubiquity/+bug/1280030 ...如果这对您来说是一个问题,请投票。
rickfoosusa

20
有没有人发现它具有讽刺意味的“邪恶”这个软件许可成本排斥我研究一个小时的时间?
recursion.ninja 2014年

13

使用Ubuntu:

sudo apt-get install php5-json
sudo service php5-fpm restart

怎么样apt-get install php7.2-json 为7.2。我尝试了这个,但是还是没用。在laravel应用上给我错误 php RuntimeException PHP's json extension is required to use Monolog's NormalizerFormatter
Smit Patel

8

LAMP用户的解决方案:

apt-get install php5-json
service apache2 restart

资源


如果重启无法解决错误,请终止apache2进程并启动:sudo pkill apache2;。服务apache2开始
xilef

3

如果您使用的是phpbrew,请尝试安装json扩展程序以使用未定义的函数json_decode()修复错误:

phpbrew ext install json

2

与7.1相同的问题

apt-get install php7.1-json sudo nano /etc/php/7.1/mods-available/json.ini

  • 将json.so添加到新文件
  • 在conf.d下添加适当的符号链接
  • 重新启动apache2服务(如果需要)

2

我有同样的问题:PHP Fatal error: Call to undefined function json_decode(),但是我在Windows上的cygwin下运行php。运行时php -m,我发现没有安装json模块。所以我再次运行cygwin setup.exe,从配置界面检查json包,问题就解决了。



0

您也可以考虑完全避免使用核心PHP模块。

这些天来,在PHP应用程序中经常将guzzle json工具用作库。如果您的应用程序是作曲家应用程序,那么将它们作为作曲家版本的一部分包含进来是很简单的。如果您告诉PHP自动包含该工具,则该工具作为库将成为json工具的交钥匙替代品。

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

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


Guzzle的json_decode 使用php的json_decode进行额外的错误检查,因此您的答案无效
emix

0

中心

现场

我在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 !!!! 准备!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.