我需要确定当前对PHP的调用是来自命令行(CLI)还是来自web服务器(在我的情况下,使用mod_php的Apache)。
有什么推荐方法吗?
我需要确定当前对PHP的调用是来自命令行(CLI)还是来自web服务器(在我的情况下,使用mod_php的Apache)。
有什么推荐方法吗?
当前回答
我用了这个:
php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)
这是来自Drush代码库,环境。公司也有类似的检查。
其他回答
joomla的方式
if (array_key_exists('REQUEST_METHOD', $_SERVER)) die();
我试一试:
echo exec('whoami');
通常网络服务器在不同的用户名下运行,所以这应该是说明问题的。
我已经使用这个函数好几年了
function is_cli()
{
if ( defined('STDIN') )
{
return true;
}
if ( php_sapi_name() === 'cli' )
{
return true;
}
if ( array_key_exists('SHELL', $_ENV) ) {
return true;
}
if ( empty($_SERVER['REMOTE_ADDR']) and !isset($_SERVER['HTTP_USER_AGENT']) and count($_SERVER['argv']) > 0)
{
return true;
}
if ( !array_key_exists('REQUEST_METHOD', $_SERVER) )
{
return true;
}
return false;
}
一种简单的方法是查询$argv变量(您可能会对命令行参数这样做)。即使没有参数$argv也返回一个空数组。
如果设置了,则使用cli。然后,您可以假设所有其他调用都是通过某个web服务器或其他。
eg:
if (isset($argv)) {
// Do the cli thing.
}
Try
isset($_SERVER['REQUEST_METHOD'])
如果设置了,则是在浏览器中。
或者,你可以检查是否
isset($_SERVER['argv'])
但在windows CLI、IDK上可能不是这样。