2009-12-06 57 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

相關問題