2009-12-06 53 views
9

我需要确定PHP文件是否正在通过cron或命令行加载代码中。我怎样才能做到这一点?如何确定PHP文件是否通过cron /命令行加载

+0

装成什么样?在什么环境下? – wallyk 2009-12-06 04:05:48

+0

Duplicate:http://stackoverflow.com/questions/1848803/execute-php-via-cron-no-input-file-specified – 2009-12-06 04:26:44

回答

15

如果您可以控制cron或命令,是否考虑传递命令行参数并使用$_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; 
+0

+1伟大的建议,仍然很简单。 – David 2009-12-06 04:29:06

+1

为我工作,虽然在我的情况下,我不得不使用'$ _SERVER ['argv'] [1]':) – bbeckford 2014-01-22 11:01:31

6

最可靠和最详尽的方式来检查您的脚本运行知道我是

php_sapi_name()

非此非彼的任何然而,列出的其他列出的方法可以让您区分“正常”CLI模式和cron调用。 gahooa的命令行参数理念可能是最好和最可靠的解决方案。

+0

我不确定在过去的几年里有什么改变了,但在我的系统上(CentOS 6.6 ,PHP 5.4.38,运行Litespeed),有一个区别。 'php_sapi_name()'从命令行运行时返回'cli'。它通过cron运行时返回'cgi-fcgi'。 – rinogo 2015-03-05 17:45:07

2

您可以检查PHP_SAPI不变,以检查是否正在使用CLI解释:

$is_cli= PHP_SAPI == 'cli';

+0

尽管这里没什么关系,但是很少有理由使用'=='运算符。 – Nathaniel 2013-06-05 21:01:07

6

这是一个简单的方法。 $_SERVER数组的某些元素仅在从HTTP调用时才被设置。因此,你可以:

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

其他还包括:$_SERVER['HTTP_HOST']

+0

+1需要最少更改的重要建议! – David 2009-12-06 04:29:50

+1

@大卫你能告诉我们你脑海中的变化吗? – matte 2011-04-04 20:03:09