2016-09-14 55 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