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();
所以我通读了这篇文章: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();