2011-12-30 42 views
3

如何使用PHP來執行shell文件?使用PHP從bash腳本獲取返回值

我有一個名爲sync.sh的文件,所以如何在php中運行該文件以及如何在完成執行後採取響應?我認爲shell_exec()將有助於觸發文件,但我怎樣才能得到腳本正確完成任務的響應?

回答

3

按照documentation

返回值

從被執行的命令或NULL的輸出是否發生了錯誤。

只是得到該函數的返回值。

$result = shell_exec('sync.sh'); 

$result將包含你想要的。

+0

問題是,我的同步文件位於/ home/administrator/scripts,因此該命令將訪問外部www文件夾? – 2011-12-30 07:53:07

+0

@SubhojitMukherjee這取決於如何設置PHP,但通常情況下,這是可能的。只要給腳本的絕對路徑。 – Ikke 2011-12-30 08:01:42

5

看看exec()函數。你可以傳遞一個return_var來保存shell腳本中的退出代碼。

$out = array(); 
$status = -1; 

exec('/path/to/sync.sh', $out, $status); 

if ($status != 0) { 
    // shell script indicated an error return 
} 

有一點要注意的是,腳本與Web服務器的權限運行,而不是你自己的用戶。

此外,一定要注意將文檔的安全性相關的警告:

當允許用戶提供的數據將被傳遞給這個函數,使用 escapeshellarg()或escapeshellcmd()將確保用戶不能詭計 該系統執行任意指令。

+0

這給我錯誤126.我想我需要管理員權限來運行該命令,而且我的腳本位於/ home/administrator /腳本此路徑。我認爲web服務器沒有授予訪問/ var/www文件夾以外的權限。這樣對嗎? – 2011-12-30 08:22:24

+0

@SubhojitMukherjee您是否在腳本上設置了權限,以便Web服務器可以運行它? (例如「chmod o + rx sync.sh」)。從用戶帳戶運行腳本時腳本是否工作? – nsanders 2011-12-30 08:27:55

+0

試試'sh sync.sh'。這不需要sync.sh是可執行的。 – Ikke 2011-12-30 10:56:53