在PHP中,如何检测执行是从CLI模式还是通过浏览器?

时间:2010-01-02 11:33:03

标签: php

我有一个共同的脚本,我在PHPcron文件和通过浏览器访问的文件中包含。代码的某些部分,我只需要非cron文件。如何检测执行是来自CLI还是通过浏览器(我知道可以通过传递一些带有cron文件的参数来完成,但我无法访问crontab)。还有其他办法吗?

5 个答案:

答案 0 :(得分:165)

使用php_sapi_name()功能。

if (php_sapi_name() == "cli") {
    // In cli-mode
} else {
    // Not in cli-mode
}

以下是文档中的一些相关说明:

  

php_sapi_name - 返回Web服务器和PHP之间的接口类型

     

虽然不是详尽无遗,但可能的返回值包括aolserver,apache,apache2filter,apache2handler,caudium,cgi(直到PHP 5.3),cgi-fcgi,cli,cli-server,continuity,embed,isapi,litespeed,milter,nsapi ,phttpd,pi3web,roxen,thttpd,tux和webjames。

答案 1 :(得分:70)

if(php_sapi_name() == "cli") {
    //In cli-mode
} else {
    //Not in cli-mode
}

答案 2 :(得分:16)

常量PHP_SAPIphp_sapi_name()具有相同的值。

(以PHP> = 4.2.0提供)

答案 3 :(得分:3)

我认为你可以从$ _SERVER变量中看到它。尝试打印出浏览器和放大器的$ _SERVER数组。 CLI,您应该看到差异。

答案 4 :(得分:-3)

您可以使用:

if (isset($argc))
{
    // CLI
}
else
{
    // NOT CLI
}