PHP JSON 函数在被称为 CLI 脚本时不可用?

Posted

技术标签:

【中文标题】PHP JSON 函数在被称为 CLI 脚本时不可用?【英文标题】:PHP JSON functions not available while being called as CLI script? 【发布时间】:2013-12-22 19:43:28 【问题描述】:

刚刚注意到一些东西,但我不确定为什么这是真的,或者为什么它与标准脚本不同,也许有人可以帮助我解决这个谜语。当从命令行运行包含 json_* 函数的 php 脚本作为可执行文件时,我将获得带有以下脚本的 Fatal error: Call to undefined function json_encode() in /var/www/jsontest.php on line 6

#!/usr/bin/php -n
<?php

$arr = array('foo', 'bar', 'baz');

print_r($json = json_encode($arr));
print_r(json_decode($bar));

在尝试解码标准干净 json 输入(通过 jsonlint 验证)时,json_decode() 也会发生这种情况

上述脚本在 Linux/DEB 终端中运行如下...

$ chmod +x jsontest.php
$ ./jsontest.php

通过我的本地网络服务器运行它,我收到了预期的输出

#!/usr/bin/php -n ["foo","bar","baz"]Array ( [0] => foo [1] => bar [2] => baz ) 

发生了什么事?为什么 JSON 在解释为可执行文件时不可用?

PHP 版本是PHP 5.5.3-1ubuntu2 (cli) (built: Oct 9 2013 14:49:24),任何可能想要它的人都可以在我的Ubuntu One Account 上发布 PHPInfo

【问题讨论】:

“php -ni | grep json”给你什么? 尝试在两个环境中使用phpinfo(),并确保您使用的是相同版本的 PHP 和 php.ini 文件。您可能将扩展名加载到一个 ini 文件中,而不是另一个。 @JesperBunnyJensen 空字符串 【参考方案1】:

我猜这里的问题是您的 php.ini 文件 - PHP 在作为 CLI 运行时使用不同的 ini 文件。看看Explosion Pill's answer on this question:

从命令行运行 php 时,可以使用 -c 或 --php-ini 参数指向要使用的 php.ini 文件。这将允许您为两者使用一个 php.ini 文件。您还可以将 php 别名为 php -c/path/to/php.ini 如果你自己运行脚本。

【讨论】:

赞成并接受,CLI 指向/etc/php5/cli/php.ini,堆栈指向/etc/php5/apache2/php.ini。很好的答案和参考。 实际上问题出在哪里,是我使用 -n 开关运行它,正如您从上面的脚本 (#!/usr/bin/php -n) 中看到的那样,正如您从 php -h 中看到的那样,我们得到了。 ...-n No php.ini file will be used ;)

以上是关于PHP JSON 函数在被称为 CLI 脚本时不可用?的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中,使用 CLI 时确保当前工作目录与脚本相同的最佳方法

从 PHP 脚本接收“json_encode”时 Swift JSON 出错。没有它也能正常工作

当我在 Zend Studio 中分析 CLI PHP 时如何传递参数?

bash 导致 ec2 cli 请求的 json 无效

如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

php返回json数据函数实例_php技巧_脚本之家