PHP 致命错误:调用未定义函数 json_decode()
问题: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)。
解答
使用 Ubuntu?
简短的回答:
sudo apt-get install php7.2-json
(或php7.1-json或php5-json取决于您运行的 PHP 版本)
然后当然 **确保你重新启动 Apache **:
sudo service apache2 restart
或者,如果您使用的是 PHP-FPM:
sudo service php7.2-fpm restart
(或php7.1-fpm或php5-fpm)
解释
由于许可证冲突,Debian 从 PHP 5.5rc2 开始删除了以前的 JSON 扩展。
JSON 许可证有一个条款规定:
软件应用于善而不是恶。
这会导致自由软件基金会对自由软件的定义出现问题,该定义指出:
出于任何目的运行程序的自由(自由 0)。
FSF 继续到专门将 JSON 许可证列为非自由。
是的,这似乎有点傻。尽管如此,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?idu003d63520
http://philsturgeon.co.uk/blog/2013/08/fud-cracker-php-55-never-lost-json-support
更多推荐
所有评论(0)