检查PHP是由Cron作业还是HTTP请求运行的最正确方法是什么?

时间:2012-03-01 10:47:59

标签: php http cron request

我现在正在做这样的事情:

if (empty($_SERVER['SERVER_NAME'])) {
  // the script is run by a Cron job
} else {
  // the script is run by a HTTP request
}

在某些情况下会出错吗?更具体地说,$ _SERVER ['SERVER_NAME']总是由Apache设置?我知道$ _SERVER中的一些变量如$ _SERVER ['REMOTE_ADDR']可能会受到客户端的污染。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

尝试内置的php函数php_sapi_name 它返回Web服务器和PHP之间的接口类型

或者,您可以使用

__FILE__   with dirname(__FILE__) or 
$_SERVER['SCRIPT_NAME']

标识当前正在执行的php脚本的路径名。 将其存储在变量中,并应用linux grep命令验证它是否存在于cron位置/usr/etc/crontab

答案 1 :(得分:0)

制作两个单独的脚本将是我的第一个建议。

$ _SERVER ['SERVER_NAME']也取决于服务器设置,但应始终设置。

来自Apache Docs:

  

如果未指定ServerName,则服务器会尝试推断出   通过对IP地址执行反向查找来实现主机名。如果没有端口   在ServerName中指定,然后服务器将使用该端口   传入的请求。为了获得最佳的可靠性和可预测性,   应使用ServerName指定显式主机名和端口   指令。