小编典典

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

all

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


阅读 96

收藏
2022-08-07

共1个答案

小编典典

使用 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

2022-08-07