PHP exec()無法取得輸出?

在php中如果想執行shell指令,可以用exec()函數來達成,不過,有時在console中下指令可以看到結果,但直接呼叫exec()卻取不到,是怎麼回事?

舉例來說,下面這個指令是用來取得影片檔案的長度的:

ffmpeg -i video.mp4 | grep Duration

這個指令在 console下直接執行,可以很正常地輸出結果,但如果放到PHP中執行呢?

$result = exec(“ffmpeg -i video.mp4 | grep Duration");

echo $result;

什麼?居然沒東西?花生省魔術?

事實上,Linux的主要輸出,除了stdout之外,還有stderr,而這個指令的輸出,正是跑到stderr去了,所以exec執行後才會抓不到結果。

解決方法:加個「2>&1」,將stderr的輸出重導至stdout

$result = exec(“ffmpeg -i video.mp4 2>&1 | grep Duration");

若想知道關於輸出介面的進一步資訊,可參考:Wiki

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *