shell_exec 回显太快或太迟

shell_exec echo'ing too fast or too late

所以我通读了这篇文章:https://trac.ffmpeg.org/wiki/PHP 并找到了这个:

<?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 完成其任务之前正在写入 "Done" echo。

但是,当我删除“&”时,该网站也会执行其预期的操作,但现在它会等到 shell_exec 完成,直到它回显 "Starting ffmpeg..."

所以我有点想知道如何获得这样的订单:

1) 回应某事 2)执行commad并等待它完成。 3) 再次回显

我完全是 php 的初学者,但在整体编程方面有经验。请大家手下留情。

感谢您的宝贵时间!

您可能想在 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();