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


What is the most proper way to check if your PHP is run by a Cron job or a HTTP 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'],可能会被客户端污染。

有什么建议吗?

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

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

来自Apache文档:

如果未指定ServerName,则服务器会尝试推断主机名。如果没有端口在ServerName中指定,则服务器将使用传入请求。为了获得最佳的可靠性和可预测性应使用ServerName指定明确的主机名和端口指令。

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

或者,你可以使用

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

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

相关文章: