2011-08-10 93 views
0

我想每天執行一個php腳本。我有一個包含下面幾行的bash腳本。我正在用這個腳本來做。但通過這種方式,它可以從另一臺計算機上執行。可以說webservername =「slmnbr」任何機構可以調用myscript與如何通過bash從服務器調用php腳本?

xhttp://slmnbr/myscript.php。

我想從服務器調用它。

BASE_URL=http://`get-webservername` 
/usr/bin/wget --no-check-certificate --timeout=0 -O - "$BASE_URL/myscript.php" 

在此先感謝

+1

您應該注意,在CLI中運行的腳本與運行時不一樣在apache中,由於CLI和apache之間的環境不同 – ajreal

回答

2

你需要有PHP CLI(命令行界面)來做到這一點。它通常帶有PHP安裝包(或單獨的包)。

所以@ @詹姆斯提到它,你需要在CLI腳本名前面加上CLI的PHP可執行文件,它在windows的php.exe的安裝目錄中。

在UN * X系統中,它位於/usr/bin/usr/local/bin/opt/local/bin的某處。如果是在PATH你可以簡單地這樣執行它:

php your_script.php 

但請記住,從服務器上運行腳本會不一樣的,從網絡服務器上運行。對於例如你將不會有POSTGET變量。所以你的腳本可能無法工作。

更新

您可以進行的cron通過使其無法讀取由誰是HTTP守護進程(通常爲www-data)運行PHP腳本的用戶已運行的腳本無法訪問您的網絡服務器。

我建議,使其只能通過誰是從cron運行它的用戶可讀:

chown cronuser your_script.php 
chmod 0400 your_script.php 

UPDATE2

如果你使用相同的用戶運行的腳本在cron web服務器,然後在腳本的頂部停止執行:

if (!(php_sapi_name() == 'cli' && empty($_SERVER['REMOTE_ADDR']))) { 
    header('HTTP/1.1 403 Forbidden'); 
    exit; 
} 
+0

感謝Karaszı, 據我所知,我應該在我的bash腳本中使用/ usr/bin/php myscript.php,並解決問題,但它認爲它比這更多,因爲我仍然可以用xhttps調用它:/ /slmnbr/cron/myscript.php。 cron無法訪問(403 Forbidden),但myscript.php仍然可以訪問。可以是權限或任何配置,使其無法訪問? – kursat

+0

@kursadyo:我更新了我的答案。 –

1

要執行的任務(或PHP腳本)每天使用cron

該鏈接提供了所有您需要的信息,包括如何防止外部訪問。

+0

在tutsplus不超過stackoverflow的情況下,最好包含答案所需的所有信息。同時也不要強迫任何人離開網站去獲得問題或答案的要點。 –

+0

謝謝克里斯,當然,我使用cron,我想學的是如何防止外部訪問像你說的。 – kursat

0

對於任何新版本的「PHP」你應該得到所謂獨立的可執行文件: 「php.exe

只需執行此像這樣:

/usr/local/php.exe your_script.php 
+0

在'/ usr/local /'中有'php.exe'這有點瘋狂:) –

+0

我只有我的Windows XAMP才能確定它在* NIX發行版中的位置。 –

+0

哦,對不起,我不知道Windows XAMP。 –