【发布时间】:2010-12-31 18:31:12
【问题描述】:
我有一个通用脚本,它包含在我的 PHPcron 文件和通过浏览器访问的文件中。代码的某些部分,我只需要非 cron 文件。我如何检测执行是来自 CLI 还是通过浏览器(我知道可以通过使用 cron 文件传递一些参数来完成,但我无权访问 crontab)。有没有其他办法?
【问题讨论】:
标签: php
我有一个通用脚本,它包含在我的 PHPcron 文件和通过浏览器访问的文件中。代码的某些部分,我只需要非 cron 文件。我如何检测执行是来自 CLI 还是通过浏览器(我知道可以通过使用 cron 文件传递一些参数来完成,但我无权访问 crontab)。有没有其他办法?
【问题讨论】:
标签: php
使用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。
【讨论】:
if(php_sapi_name() == "cli") {
//In cli-mode
} else {
//Not in cli-mode
}
【讨论】:
有一个常量PHP_SAPI 与php_sapi_name() 具有相同的值。
(在 PHP >= 4.2.0 中可用)
【讨论】:
我认为您可以从 $_SERVER 变量中看到它。尝试打印出浏览器和 CLI 的 $_SERVER 数组,您应该会看到差异。
【讨论】:
php_sapi_name()。
你可以使用:
if (isset($argc))
{
// CLI
}
else
{
// NOT CLI
}
【讨论】:
$argc 可以在应用程序中设置,不是吗?不是可靠的方法。一次花了我半天的时间。 php_sapi_name() 是我知道的唯一好方法。