作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找到一种方法来回显 exec 调用的输出,然后在进程运行时将其刷新到屏幕上。我编写了一个简单的 PHP 脚本,它接受文件上传,然后在文件类型不合适时使用 FFMPEG 转换文件。我在 Windows 机器上执行此操作。目前我的命令如下所示:
$cmd = "ffmpeg.exe -i ..\..\uploads\\".$filename." ..\..\uploads\\".$filename.".m4v 2>&1";
exec( $cmd, $output);
while( $output ) {
print_r( $output);
ob_flush(); flush();
}
ob_flush()
和
flush()
清除输出缓冲区,但我只有在该过程完成后才能获得输出。该命令完美运行,只是在转换时不会更新页面。我想要一些输出,以便人们知道发生了什么。
set_time_limit( 10 * 60 ); //5 minute time out
最佳答案
由于 exec 调用是阻塞调用,因此您无法使用缓冲区来获取状态。
相反,您可以将系统调用中的输出重定向到日志文件。让客户端向服务器查询进度更新,在这种情况下,服务器可以解析日志文件的最后几行以获取有关当前进度的信息并将其发送回客户端。
关于PHP exec - 在进度期间逐行回显输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766418/
我是一名优秀的程序员,十分优秀!