某些函数在被 Web 浏览器调用时被定义,但在命令行模式下变得未定义,这似乎很奇怪。
例如,
<?php
echo function_exists('mb_detect_encoding') ? 'yes' : 'no';
?>
当它在浏览器中运行时,它会打印“yes”,这意味着该函数已经定义。
但是当我在命令行中运行这段代码时,它会打印“否”
为什么?我在命令行模式下错过了哪些设置?
某些函数在被 Web 浏览器调用时被定义,但在命令行模式下变得未定义,这似乎很奇怪。
例如,
<?php
echo function_exists('mb_detect_encoding') ? 'yes' : 'no';
?>
当它在浏览器中运行时,它会打印“yes”,这意味着该函数已经定义。
但是当我在命令行中运行这段代码时,它会打印“否”
为什么?我在命令行模式下错过了哪些设置?
在 linux 上,您应该检查 /etc/php5/cli/conf.d 是否已启用。否则尝试从另一个环境复制,例如 /etc/php5/apache2/conf.d
该命令php -m
列出您的活动模块(扩展)。
要查看它是否处于活动状态,请mbstring
在此列表中搜索。如果它不存在,它可能是:
或者
将一个添加extension=mbstring.so
到您的全局 php.ini 以启用它。(如果它被构建为共享库。)
这是因为您的发行版选择了编译时选项。似乎他们已经在 cli 解释器中启用了它,但没有在 apache 模块中启用它。
检查 mbstring 扩展的安装说明。如果你真的需要它,你必须自己编译 php。
通过命令行 (CLI) 调用脚本时,请确保使用与 Web 服务器在执行 PHP 时使用的相同的配置文件。
来自“php --help”:
-c | 在此目录中查找 php.ini 文件
如今,模块 mb_string 就是其中之一,是动态加载的......