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 时如何传递参数?