gpt4 book ai didi

php - 如何在每次迭代中获取 popen() 回调的最后一行?

转载 作者:行者123 更新时间:2023-12-04 23:26:35 25 4
gpt4 key购买 nike

我正在尝试使用 php 和 AJAX 创建一个带有 FFMPEG 的进度条。当用户上传视频文件时,我希望能够显示当前百分比直到完成。我设法让一切正常,但我有一个问题。

数据返回我想要的,但它也返回之前迭代的所有数据......就像它只是将所有内容堆叠在顶部,而不是从之前的迭代中清除数据。我尝试使用 tail认为它只会返回最后一行,但它没有返回任何内容。

这是我正在使用的代码:

编码.php

$video_path = 'test.mp4';
$cmd = 'ffmpeg -i ' . $video_path .' -y -hide_banner output.mp4 2>&1';

while (@ ob_end_flush());

$proc = popen($cmd, 'r');

while (!feof($proc))
{

$file = escapeshellarg(fread($proc, 4096));
//$line = `tail -n 1 $file`; // <-tried this with no luck
echo fread($file, 4096) . "\n";
@ flush();
}
return 'complete';
pclose($proc);

上面的代码返回:
// first iteration
frame= 52 fps= 13 q=29.0 size= 279kB time=00:00:00.10 bitrate=22856.9kbits/s

// second iteration
frame= 52 fps= 13 q=29.0 size= 279kB time=00:00:00.10 bitrate=22856.9kbits/s
frame= 54 fps= 12 q=29.0 size= 329kB time=00:00:00.16 bitrate=16146.6kbits/s

// third iteration
frame= 52 fps= 13 q=29.0 size= 279kB time=00:00:00.10 bitrate=22856.9kbits/s
frame= 54 fps= 12 q=29.0 size= 329kB time=00:00:00.16 bitrate=16146.6kbits/s
frame= 57 fps= 11 q=29.0 size= 464kB time=00:00:00.26 bitrate=14233.2kbits/s

正如您所看到的数据堆栈,我只需要新的数据行,而不是数据堆栈。

** 编辑 ** 这已被标记为重复,而不是我解释它有何不同,我想听听这是同一件事吗?我没有写入日志文件,并且像大多数人一样,不认为这是一个好的解决方案。

最佳答案

您需要在刷新方法之前清理缓冲区

ob_clean

关于php - 如何在每次迭代中获取 popen() 回调的最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44245250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com