PHP 致命错误: 调用未定义函数 json _ decode ()

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

205693 次浏览

使用 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.5 rc2中删除了之前的 JSON 扩展。

JSON 许可证有一个条款规定:

软件应该用于正义,而不是邪恶。

这导致了 自由软件基金会对自由软件的定义的一个问题:

为任何目的运行程序的自由(自由0)。

FSF 继续到 明确地将 JSON 许可证列为 nonfree

是的,这看起来有点傻。尽管如此,Debian 还是删除了不兼容的 JSON 扩展,而是提供了一个功能等同的 更换延期逗留期限

需要说明的是: PHP 本身没有删除 JSON,它是 还是主人。这是一个发行版/包管理器的问题。

拉斯姆斯说得很清楚:

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

使用 Ubuntu:

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

LAMP 用户解决方案:

apt-get install php5-json
service apache2 restart

来源

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

模块已经安装,但是/etc/php5/cli/conf. d 中没有符号链接

7.1版也有同样的问题

Apt-get install php7.1-json Sudo nano/etc/php/7.1/mods-able/json.ini

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

如果您正在使用 菲布鲁尝试安装 Json扩展来修复与 未定义函数 json _ decode ()的错误:

phpbrew ext install json

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

现在,在 PHP 应用程序中使用 guzzlejson 工具作为库是很常见的。如果您的应用程序是一个作曲家应用程序,那么将它们作为作曲家构建的一部分包含在内是微不足道的。 作为一个库,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

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 Tag! ! !Git Push! ! ! !预备!

作为一个 RHEL 8用户,这是固定的:

yum install php-json

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

这也可以在 CENTOS 8上使用。

CPanel

转到 多 PHP INI 编辑器并选择 Editor Mode 选项卡,输入以下内容以启用 JSON 扩展:

extension=json.so

或者,如果根目录中有一个现有的 php.ini 文件,请检查是否列出了这个扩展名,并确保它没有被注释掉(前面有分号)。