在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