【问题标题】:PHP JSON functions not available while being called as CLI script?PHP JSON 函数在被称为 CLI 脚本时不可用?
【发布时间】: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 空字符串

标签: php json bash ubuntu command-line-interface


【解决方案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 ;)
猜你喜欢
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
相关资源
最近更新 更多