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

有什么推荐方法吗?


当前回答

Try

isset($_SERVER['REQUEST_METHOD'])

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

或者,你可以检查是否

isset($_SERVER['argv'])

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

其他回答

我认为他的意思是如果PHP CLI被调用,或者如果它是一个来自web请求的响应。最好的方法是使用php_sapi_name(),如果它正在运行一个web请求,它将回显Apache(如果这是它正在运行的)。

从php_sapi_name()的php文档中获取的一些列表:

aolserver apache apache2filter apache2handler caudium cgi(直到PHP 5.3) cgi-fcgi cli cli-server(自PHP 5.4起内置web服务器) 连续性 嵌入 fpm-fcgi isapi litespeed 雄鱼 nsapi phttpd pi3web roxen thttpd 晚礼服 webjames

// Detect CLI calls
define("IS_CLI_CALL",( strcmp(php_sapi_name(),'cli') == 0 ));

if(IS_CLI_CALL){
   //do you stuff here

}

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

例如:

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

Try

isset($_SERVER['REQUEST_METHOD'])

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

或者,你可以检查是否

isset($_SERVER['argv'])

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

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

例子:

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