我需要确定当前对PHP的调用是来自命令行(CLI)还是来自web服务器(在我的情况下,使用mod_php的Apache)。

有什么推荐方法吗?


当前回答

我试一试:

echo exec('whoami');

通常网络服务器在不同的用户名下运行,所以这应该是说明问题的。

其他回答

function is_cli() {
    return !http_response_code();
}

例子:

if (is_cli()) {
    echo 'command line';
} else {
    echo 'browser';
}

Try

isset($_SERVER['REQUEST_METHOD'])

如果设置了,则是在浏览器中。

或者,你可以检查是否

isset($_SERVER['argv'])

但在windows CLI、IDK上可能不是这样。

这应该处理所有的情况(包括php-cgi)

return (php_sapi_name() === 'cli' OR defined('STDIN'));

我试一试:

echo exec('whoami');

通常网络服务器在不同的用户名下运行,所以这应该是说明问题的。

根据http://jp2.php.net/manual/en/features.commandline.php,只有在从CLI运行时才会设置一些常量。这些常量是STDIN, STDOUT和STDERR。测试其中一个将告诉您它是否处于cli模式