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

我有一个共同的脚本,其中包括我的PHPcron文件和通过浏览器访问的文件。 代码的一部分,我只需要非cron文件。 我如何检测执行是从CLI还是通过浏览器(我知道它可以通过传递一些参数与cron文件,但我没有访问crontab)。 有没有其他的方法?

使用php_sapi_name()函数。

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

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

php_sapi_name – 返回Web服务器和PHP之间的接口types

尽pipe并不详尽,但可能的返回值包括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。

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

有一个常量PHP_SAPI具有与php_sapi_name()相同的值。

(可用PHP> = 4.2.0)

我想你可以从$ _SERVERvariables中看到它。 尝试打印两个浏览器和CLI $ _SERVERarrays,你应该看到不同之处。

您可以使用:

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