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

有什么推荐方法吗?


当前回答

Php_sapi_name是您希望使用的函数,因为它返回接口类型的小写字符串。此外,还有一个PHP常量PHP_SAPI。

文档可以在这里找到:http://php.net/php_sapi_name

例如,要确定PHP是否正在从CLI运行,你可以使用这个函数:

function isCommandLineInterface()
{
    return (php_sapi_name() === 'cli');
}

其他回答

我用了这个:

php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)

这是来自Drush代码库,环境。公司也有类似的检查。

我建议检查是否设置了$_SERVER数组的一些条目。

例如:

if (isset($_SERVER['REQUEST_METHOD'])) {
        print "HTTP request\n";
} else {
        print "CLI invocation\n";
}

joomla的方式

if (array_key_exists('REQUEST_METHOD', $_SERVER)) die();

有这么多复杂的解决方案。……怎么样?

if($_SERVER['REQUEST_SCHEME']=="http" or $_SERVER['REQUEST_SCHEME']=="https"){
    // must be browser :)
}

我试一试:

echo exec('whoami');

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