PHP 致命错误: 调用未定义的函数 json_decode()使用 Ubuntu?解释更多详情

2022-08-30 06:32:03

Apache 正在登录 。经过一些谷歌搜索,似乎这个问题是没有最新版本的php的结果。奇怪的是,运行输出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

清楚地表明我的版本大于 .php5.1

关于可能导致这种情况的原因的任何想法,或者要采取的步骤来找出答案?

编辑:脚本回显phpversion的结果是5.5.1-2+debphp.org~precise

编辑:结果也是phpinfo()PHP Version 5.5.1-2+debphp.org~precise+2

此外,在 中,它列出了模块 JSON 和模块作者(Omar Kilani、Scott MacVicar)。phpinfo()


答案 1

使用 Ubuntu?

简短的回答:

sudo apt-get install php7.2-json

(或 php7.1-jsonphp5-json,具体取决于您运行的 PHP 版本)

然后,当然要确保重新启动Apache

sudo service apache2 restart

或者,如果您使用的是 PHP-FPM:

sudo service php7.2-fpm restart

(或 php7.1-fpmphp5-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?id=63520

http://philsturgeon.co.uk/blog/2013/08/fud-cracker-php-55-never-lost-json-support


答案 2

使用 Ubuntu :

sudo apt-get install php5-json
sudo service php5-fpm restart

推荐