2013-07-02 120 views
0

我需要知道如果我通過exec命令調用一個php腳本執行命令,並且由於任何原因導致腳本執行失敗,說「找不到文件」,那我該如何找到它。 我有以下命令:如何查找在exec命令中執行的命令是否失敗?

$cmd="php testfile.php" ; 
    $outputfile="testoutput.txt"; 
    exec(sprintf("%s > %s 2>&1 & echo $!", $cmd, $outputfile),$pidArr, $status); 

exec命令返回-1的錯誤的情況下,但在這種情況下,高管在執行成功即$狀態在我的情況下,未來0,但是「PHP testfile.php」命令失敗,輸出得到testoutput.txt。 但我需要知道的方式,以便我可以在exec後識別它,如果命令失敗。 我可以考慮選擇閱讀testoutput.txt和grep的失敗或錯誤的話,但我不認爲這是可靠的。

在此先感謝!

回答

1

你可以通過一個可選的第二個參數接收exec函數的輸出結果:

所以你可以使用第三個參數執行exec(),然後檢查它是否爲非零的錯誤條件。

exec("blah blah blah", $output, $result); 
if($result > 0) 
{ 
    die('error message here'); 
} 

如果你沒有找到通過第二個參數的錯誤,可以通過命令$尾的/ var在Ubuntu服務器12.10搜索的Apache的錯誤日誌,例如/日誌/的Apache2 /錯誤。日誌

讓我知道,如果我可以幫助你更多。

+0

我試過了,實際上它的第三個參數是0,在我的情況下,它是一個文件找不到錯誤 –

+0

所以可能你應該找到apace error或任何其他異常處理方法來追蹤它。 – liyakat

+0

你檢查過你的apache錯誤日誌嗎? – liyakat

1

http://php.net/manual/en/function.exec.php

exec(sprintf("%s > %s 2>&1 & echo $!", $cmd, $outputfile),$pidArr, $status); 

$狀態= 0,如果沒有錯誤,> 0,如果錯誤

+0

非常感謝!我需要在echo $!之前使用「&&」.... –