如何确定是否通过cron/命令行加载PHP文件

如何确定是否通过cron/命令行加载PHP文件,php,command-line,cron,Php,Command Line,Cron,我需要确定PHP文件是通过cron还是通过代码中的命令行加载的。如何执行此操作?如果您可以控制cron或命令,是否考虑过传递命令行参数,并使用$\u SERVER['argv'][0]读取它 * * * * * /usr/bin/php /path/to/script --cron 在脚本中: <?php if(isset($_SERVER['argv'][0]) and $_SERVER['argv'][0] == '--cron') $I_AM_CRON = true; e

我需要确定PHP文件是通过cron还是通过代码中的命令行加载的。如何执行此操作?

如果您可以控制cron或命令,是否考虑过传递命令行参数,并使用
$\u SERVER['argv'][0]
读取它

* * * * *   /usr/bin/php /path/to/script --cron
在脚本中:

<?php
if(isset($_SERVER['argv'][0]) and $_SERVER['argv'][0] == '--cron')
   $I_AM_CRON = true;
else
   $I_AM_CRON = false;

据我所知,检查脚本运行位置的最可靠、最详尽的方法是


但是,无论是此方法还是此处列出的任何其他方法,都无法区分“正常”CLI模式和cron调用。gahooa的命令行参数思想可能是最好、最可靠的解决方案。

您可以检查
PHP\u SAPI
常量,以检查是否正在使用CLI解释器:


$is_cli=PHP_SAPI=='cli'

这是一种简单的方法。
$\u服务器
数组的某些元素仅在从HTTP调用时设置。因此,您可以:

if(!isset($_SERVER['REQUEST_METHOD'])){
 // from cron or command line
}else{
 // from HTTP
}

其他包括:
$\u服务器['HTTP\u主机]

加载到什么?在什么环境下?重复:虽然与此无关,但几乎没有理由使用
=
操作符。在我的情况下,我使用了
$\u服务器['argv'][1]
:)我不确定在过去几年中是否有什么变化,但在我的系统上(CentOS 6.6,PHP5.4.38,运行Litespeed),这是有区别的
php_sapi_name()
从命令行运行时返回
cli
。当通过cron运行时,它返回
cgi fcgi