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

检查PHP是否由Cron作业或HTTP请求运行的最合适方法是什么?,php,http,cron,request,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 } 在某些情况下会出错吗?更具体地说,$\u SERVER['SERVER\u NAME']是否总是由Apache设置?我知道$\u服务器中的一些变量,比如$\u服务器['REMOTE\u ADDR'],可能会被客户端污染

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

if (empty($_SERVER['SERVER_NAME'])) {
  // the script is run by a Cron job
} else {
  // the script is run by a HTTP request
}
在某些情况下会出错吗?更具体地说,$\u SERVER['SERVER\u NAME']是否总是由Apache设置?我知道$\u服务器中的一些变量,比如$\u服务器['REMOTE\u ADDR'],可能会被客户端污染


有什么建议吗?

试试内置的php函数
php\u sapi\u name
它返回web服务器和PHP之间的接口类型

或者,你可以使用

__FILE__   with dirname(__FILE__) or 
$_SERVER['SCRIPT_NAME']
标识当前正在执行的php脚本的路径名。
将其存储在一个变量中,并应用linux
grep
命令验证它是否存在于cron位置
/usr/etc/crontab
尝试内置php函数
php\u sapi\u name
它返回web服务器和PHP之间的接口类型

或者,你可以使用

__FILE__   with dirname(__FILE__) or 
$_SERVER['SCRIPT_NAME']
标识当前正在执行的php脚本的路径名。
将其存储在一个变量中,然后应用linux
grep
命令来验证它是否存在于cron位置
/usr/etc/crontab
制作两个单独的脚本将是我的第一个建议

另外$\u SERVER['SERVER\u NAME']取决于服务器设置,但应始终进行设置

来自Apache文档:

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


我的第一个建议是编写两个单独的脚本

另外$\u SERVER['SERVER\u NAME']取决于服务器设置,但应始终进行设置

来自Apache文档:

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


可能重复我尝试了使用php_sapi_name()回答这个问题的建议答案,但是Cron和HTTP请求都返回相同的“cgi”值。您如何进行Cron调用?使用类似于
wget的东西http://blah/script.php
php script.php
?然后我非常惊讶
php\u sapi\u name
php\u sapi
不是刚刚测试过的
cli
。crontab with
*/1****php/path/to/script.php
outputs
cli
with
php\u sapi\u name()
。我尝试了使用php\u sapi\u name()回答问题的建议答案,但Cron和HTTP请求都返回相同的“cgi”值。您如何进行Cron调用?使用类似于
wget的东西http://blah/script.php
php script.php
?然后我非常惊讶
php\u sapi\u name
php\u sapi
不是刚刚测试过的
cli
。带有
*/1****php/path/to/script.php的crontab
输出带有
php\u sapi\u name()的
cli
。。。单独的脚本会破坏我想要做的事情的目的。实际上,为了调试脚本,我正在尝试使用HTTP请求。以前,我尝试在调试期间手动更改脚本以仅影响测试数据,但我发现这很不方便,因为有时我忘记将其更改回实际脚本。然后,可能会将该文件放在webroot中进行调试,并在切换到cronjobHmm时将其移出/删除调试。。。单独的脚本会破坏我想要做的事情的目的。实际上,为了调试脚本,我正在尝试使用HTTP请求。以前,我尝试在调试期间手动更改脚本以仅影响测试数据,但我发现这很不方便,因为有时我忘记将其更改回实际脚本。然后,可能会将该文件放在webroot中进行调试,并在切换到cronjob时将其移出/删除调试