我有一个共同的脚本,我在PHPcron文件和通过浏览器访问的文件中包含。代码的某些部分,我只需要非cron文件。如何检测执行是来自CLI还是通过浏览器(我知道可以通过传递一些带有cron文件的参数来完成,但我无法访问crontab)。还有其他办法吗?
答案 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_SAPI
与php_sapi_name()
具有相同的值。
(以PHP> = 4.2.0提供)
答案 3 :(得分:3)
我认为你可以从$ _SERVER变量中看到它。尝试打印出浏览器和放大器的$ _SERVER数组。 CLI,您应该看到差异。
答案 4 :(得分:-3)
您可以使用:
if (isset($argc))
{
// CLI
}
else
{
// NOT CLI
}