1

某些函数在被 Web 浏览器调用时被定义,但在命令行模式下变得未定义,这似乎很奇怪。

例如,

<?php
echo function_exists('mb_detect_encoding') ? 'yes' : 'no';
?>

当它在浏览器中运行时,它会打印“yes”,这意味着该函数已经定义。

但是当我在命令行中运行这段代码时,它会打印“否”

为什么?我在命令行模式下错过了哪些设置?

4

4 回答 4

2

在 linux 上,您应该检查 /etc/php5/cli/conf.d 是否已启用。否则尝试从另一个环境复制,例如 /etc/php5/apache2/conf.d

于 2013-04-18T14:52:01.677 回答
1

该命令php -m列出您的活动模块(扩展)。

要查看它是否处于活动状态,请mbstring在此列表中搜索。如果它不存在,它可能是:

  • 仅在 apache_handler php.ini 中启用

或者

  • 在 cli php.ini 中禁用

将一个添加extension=mbstring.so到您的全局 php.ini 以启用它。(如果它被构建为共享库。)

于 2013-04-18T15:00:36.617 回答
1

这是因为您的发行版选择了编译时选项。似乎他们已经在 cli 解释器中启用了它,但没有在 apache 模块中启用它。

检查 mbstring 扩展的安装说明。如果你真的需要它,你必须自己编译 php。

于 2013-04-18T14:53:04.710 回答
0

通过命令行 (CLI) 调用脚本时,请确保使用与 Web 服务器在执行 PHP 时使用的相同的配置文件。

来自“php --help”:

-c | 在此目录中查找 php.ini 文件

如今,模块 mb_string 就是其中之一,是动态加载的......

于 2013-04-18T14:53:28.773 回答