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)。
使用Ubuntu?
简短答案:
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中。这是发行版/程序包管理器问题。
Rasmus明确指出:
我们没有删除json,并且如果没有内置的json支持,我们将永远不会发布php版本。5.5中的任何更改都归因于您使用的任何发行包,但我们无法控制它们。