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

bin*_*noy 90 php

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

小智 170

使用该php_sapi_name()功能.

if (php_sapi_name() == "cli") {
    // In cli-mode
} else {
    // Not in cli-mode
}
Run Code Online (Sandbox Code Playgroud)

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

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.

  • 这曾经是一个链接唯一的答案,直到有人复制了@LinusUnnebäck的答案.坏习惯!关注这一个,赞成另一个...... (13认同)
  • @GottliebNotschnabel谢谢!看到这种情况非常烦人. (6认同)
  • PHP_SAPI也可以用于此,所以它并不是唯一正确的方法 (4认同)
  • +1唯一正确的方法. (2认同)
  • 捏别人的帮助,tsk,tsk.真的不是很棒,老兄. (2认同)

Lin*_*äck 69

if(php_sapi_name() == "cli") {
    //In cli-mode
} else {
    //Not in cli-mode
}
Run Code Online (Sandbox Code Playgroud)


jus*_*ody 18

有一个常数PHP_SAPI具有相同的值php_sapi_name().

(PHP> = 4.2.0)