PHP致命错误:调用未定义的函数json_decode()
Apache正在loggingPHP Fatal error: Call to undefined function json_decode()
。 一些谷歌search后,似乎这个问题是没有最新版本的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 php5-json
那么当然要确保你重启Apache :
sudo service apache2 restart
或者如果您正在使用PHP-FPM:
sudo service php5-fpm restart
说明
由于许可冲突,Debian已经从PHP 5.5rc2中删除了以前的JSON扩展。
JSON许可证有一个条款,规定:
本软件应当用于善意而非恶意。
自由软件基金会对自由软件的定义造成了一个问题:
运行程序的自由,用于任何目的(自由0)。
FSF继续将JSON许可证列为非自由的。
是的,这似乎有点愚蠢。 尽pipe如此,Debian已经删除了不符合规范的JSON扩展,而是提供了一个function相当的replace扩展 。
要清楚:PHP本身并没有删除JSON,它仍然是主人 。 这是一个发行版/包pipe理器问题。
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?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用户的解决scheme:
apt-get install php5-json service apache2 restart
资源
模块已安装,但符号链接不在/etc/php5/cli/conf.d中
与7.1相同的问题
apt-get install php7.1-json sudo nano /etc/php/7.1/mods-available/json.ini
- 将json.so添加到新文件
- 在conf.d下添加适当的sym链接
- 重新启动apache2服务(如果需要)
如果您使用的是phpbrew,请尝试安装json扩展以修复未定义函数json_decode()的错误:
phpbrew ext install json
我有同样的问题: PHP Fatal error: Call to undefined function json_decode()
,但我运行Windows下的cygwin下的php。 当我运行php -m
,发现没有安装json模块。 所以我再次运行cygwin setup.exe,从configuration界面检查json包,问题就解决了。
你也可以考虑完全避免核心PHP模块。
现在在PHP应用程序中使用guzzle json工具作为库是相当常见的。 如果您的应用程序是一个composer php应用程序,将它们作为composer php构build的一部分,这是微不足道的。 如果您告诉PHP自动包含该工具,则作为库的guzzle工具将成为json工具的交钥匙replace工具。
http://docs.guzzlephp.org/en/stable/search.html?q=json_encode#
http://apigen.juzna.cz/doc/guzzle/guzzle/function-GuzzleHttp.json_decode.html