Apache 正在记录PHP Fatal error: Call to undefined function json_decode(). 经过一番谷歌搜索,这个问题似乎是由于没有最新版本的 php 造成的。奇怪的是,运行php --version输出
PHP Fatal error: Call to undefined function json_decode()
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.
php
5.1
关于什么可能导致这种情况的任何想法,或者要采取哪些步骤来找出答案?
编辑:脚本回显 phpversion 的结果是5.5.1-2+debphp.org~precise
5.5.1-2+debphp.org~precise
编辑:结果phpinfo()也是PHP Version 5.5.1-2+debphp.org~precise+2
phpinfo()
PHP Version 5.5.1-2+debphp.org~precise+2
此外,在 中phpinfo(),它列出了模块 JSON 和模块作者(Omar Kilani、Scott MacVicar)。
简短的回答:
sudo apt-get install php7.2-json
(或php7.1-json或 php5-json取决于您正在运行的 PHP 版本)
php7.1-json
php5-json
然后当然 要确保重新启动 Apache :
sudo service apache2 restart
或者,如果您使用的是 PHP-FPM:
sudo service php7.2-fpm restart
(或php7.1-fpm或php5-fpm)
php7.1-fpm
php5-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