首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP -如何最好地确定当前调用是来自CLI还是来自web服务器?

PHP -如何最好地确定当前调用是来自CLI还是来自web服务器?
EN

Stack Overflow用户
提问于 2009-06-01 02:26:42
回答 16查看 96.1K关注 0票数 215

我需要确定当前的PHP调用是从命令行还是从web服务器(在我的例子中是带有mod_php的Apache )。

有什么推荐的方法吗?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2009-06-01 02:34:43

php_sapi_name是您想要使用的函数,因为它返回接口类型的小写字符串。此外,还有PHP常量PHP_SAPI

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

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

代码语言:javascript
复制
function isCommandLineInterface()
{
    return (php_sapi_name() === 'cli');
}
票数 342
EN

Stack Overflow用户

发布于 2014-09-22 13:57:53

我使用这个函数已经有几年了。

代码语言:javascript
复制
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;
}
票数 43
EN

Stack Overflow用户

发布于 2016-12-31 06:09:00

php_sapi_name()确实不是执行此检查的最佳方法,因为它依赖于对许多可能的值进行检查。php-cgi二进制文件可以从命令行、shell脚本或cron作业中调用,并且(在大多数情况下)这些也应该被视为'cli‘,但是php_sapi_name()将为它们返回不同的值(注意,普通版本的PHP不是这样的,但是您希望您的代码在任何地方都可以运行,对吧?)更不用说明年可能会有我们现在不可能知道的使用PHP的新方法。我宁愿不去想它,因为我关心的只是我是否应该用HTML包装我的输出。

幸运的是,PHP有一种专门检查这一点的方法。只需使用不带任何参数的http_response_code(),如果从web服务器类型的环境运行,则返回TRUE;如果从CLI型环境运行,则返回FALSE。代码如下:

代码语言:javascript
复制
$is_web=http_response_code()!==FALSE;

这甚至可以在你不小心(?)在调用此函数之前,从CLI (或类似于CLI)运行的脚本中设置响应代码。

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/933367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档