176

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

10 回答 10

363

使用 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 中。这是发行版/包管理器问题。

拉斯穆斯说得很清楚

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

于 2013-08-14T18:38:14.250 回答
13

使用 Ubuntu:

sudo apt-get install php5-json
sudo service php5-fpm restart
于 2014-01-11T21:54:31.867 回答
8

LAMP用户解决方案:

apt-get install php5-json
service apache2 restart

来源

于 2014-02-20T11:10:37.307 回答
3

如果您使用phpbrew尝试安装json扩展来修复未定义函数 json_decode()的错误:

phpbrew ext install json
于 2017-06-23T21:51:01.043 回答
3

作为 RHEL 8 用户,此问题已通过以下方式修复:

yum install php-json

然后重新加载 nginx 和 php-fpm。所以基本上默认php安装中缺少的json库。

这也应该适用于 CENTOS 8。

于 2021-04-28T09:20:43.053 回答
2

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

于 2016-05-10T14:35:51.677 回答
2

7.1同样的问题

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

  • 将 json.so 添加到新文件中
  • 在 conf.d 下添加适当的符号链接
  • 重启 apache2 服务(如果需要)
于 2017-05-16T10:37:37.553 回答
1

模块已安装,但符号链接不在 /etc/php5/cli/conf.d

于 2016-07-29T11:46:30.267 回答
0

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

如今,在 PHP 应用程序中使用 guzzle json 工具作为库是很常见的。如果您的应用程序是作曲家应用程序,将它们作为作曲家构建的一部分包含在内是微不足道的。guzzle 工具作为一个库,将成为 json 工具的交钥匙替代品,如果您告诉 PHP 自动包含该工具。

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

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

于 2017-06-28T06:38:44.687 回答
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 文件,它为 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 提交!!吉特标签!!!!吉特推!!!!准备好!

于 2019-03-10T16:24:47.167 回答