2013-02-26 30 views
15

我正在使用shell_exec()第一次的過程。我正嘗試使用ffmpeg外殼腳本來轉換我的服務器上的一些視頻文件。PHP - 如何獲取殼牌錯誤回顯到屏幕

當我下面的代碼在瀏覽器中,它返回NULL:

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4")); 

然而,當我運行在我的終端的等效代碼:

> ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4

我回來整個負載以錯誤結尾的有用信息"At least one output file must be specified"

爲什麼此信息未被傳回給我的PHP腳本o我可以迴應它?

+3

您可以嘗試在命令末尾追加'2>&1'以將錯誤消息重定向到標準輸出 – koopajah 2013-02-26 10:25:47

回答

33

錯誤數據從目標程序的STDERR流輸出。您可以通過附加2>&1的命令,該命令將重定向STDERRSTDOUT可以訪問通過從shell_exec()正常返回的字符串錯誤數據,您目前看到的數據流:您可能還需要採取

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4 2>&1")); 

看看proc_open()這將允許你訪問STDIN,STDOUTSTDERR作爲三個單獨的數據流,它可以對目標程序提供更精細的控制,以及如何處理它的輸入和輸出,包括重定向任何和所有如果需要的話,可以將它們直接寫入日誌文件。請注意,這是一個更復雜的機制,有許多陷阱和絆倒危險。

關於標準流的更多信息可以參考here

+0

Aha!那裏是:) – Ash 2013-02-26 10:27:03

+0

嗯,救了我的一天...有一個upvote和一個餅乾! – Ikari 2016-09-13 17:44:33