2013-01-06 16 views
1

可能重複:
PHP - how to best determine if the current invocation is from CLI or web server?如何在PHP中區分CRON作業和人類用戶?

我我的託管服務器,它運行在UNIX,當然上創建的日常cron作業。

我把下面的命令:

/usr/bin/php /home/myusername/public_html/foo/foo.php 

然後,正如所料,它執行該foo.php每天的基礎上。

但是這foo.php包含重要的信息,我不希望隨機的人(不要粗魯)去http://www.mywebsite.com/foo/foo.php和執行腳本。

那麼我能做些什麼來區分CRON作業和PHP中的人類用戶呢?

我最近看到,當CRON作業執行時,沒有給出IP地址($_SERVER['REMOTE_ADDR']爲空)。但我不確定這是否是一種僥倖。

我試過在Google上搜索這個主題,但沒有結果。

回答

2

在我用這個過去

if (php_sapi_name() != "cli") { 
    throw new Exception("someone tried to run this script outside of cli"); 
} 

php_sapi_name()函數可以告訴你誰在運行腳本。這裏是文檔頁面:php_sapi_name

3

您可以將cron腳本放在web根目錄之外,比如/home/myusername/cron

或者,如果這不是一種選擇,由於FTP的限制,可以將參數添加到cron腳本:

/usr/bin/php /home/myusername/....../foo.php cron 

然後檢查:

if($_SERVER['argv'][0] != "cron") die("This is a cron script, you cannot access it.");