2016-09-14 58 views
0

所以我讀這篇文章通過量:https://trac.ffmpeg.org/wiki/PHP ,發現這個:了shell_exec echo'ing過快或過晚

<?php 
echo "Starting ffmpeg...\n\n"; 
echo shell_exec("ffmpeg -i input.avi output.avi >/dev/null 2>/dev/null &"); 
echo "Done.\n"; 

代碼工作幾乎完全正常,但困擾我的唯一的事情是,因爲shell_exec正在後臺執行(所以在整個時間內沒有加載標籤),所有的回顯正在立即執行。這意味着,在ffmpeg完成任務之前,「完成」回顯正在寫入。

但是當我刪除「&」該網站還做什麼它打算做的,但現在卻等到了shell_exec完成,直到它呼應的開展「開始的ffmpeg ...」

所以我還挺有問題想辦法如何得到這樣一個順序:

1)迴應的東西 2)執行commad並等到它完成。 3)再次回聲

我是一個初學PHP的人,但總體編程經驗豐富。請憐憫。

謝謝你的時間!

+2

使用與在命令結束後將立即返回(並在後臺運行的進程)這就是爲什麼在頁面加載和顯示最終echo語句命令的輸出完成之前。這個答案給出了一種方法來啓動任務,無需等待完成,並且還可以查詢轉換的進度http://stackoverflow.com/a/6245461/2543650 – Legion

回答

1

在執行shell_exec之前,您可能需要使用flush。有幾點需要注意,這些在php文檔頁面中有很好的解釋。希望這可以幫助。

<?php 
    echo "Starting ffmpeg...\n\n"; 

    ob_flush(); 
    flush(); 
    echo shell_exec("ffmpeg -i input.avi output.avi >/dev/null 2>/dev/null"); 

    // a sleep could effectively be the same as your shell_exec operation 
    // sleep(5); 

    echo "Done.\n"; 
    ob_end_flush(); 
+0

我使用了flush();函數之前我的shell_exec ..它沒有幫助,但感謝您的輸入! – userlip

+0

你也嘗試過刷新後的ob_flush()嗎? – raj

+0

我很抱歉 - 我只是忽略了你的代碼,只是看到了flush();但沒有看到其他ob_flushes!它真的有效!不幸的是,儘管我的html代碼因此而失效了。我目前正在使用我的本地服務器在虛擬機,只是一個基本的HTML 1按鈕和2或3個字,但他們似乎消失了! 雖然「起步ffmpeg」站在那裏。仍然有關於HTML部分的任何建議? – userlip