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