Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在每次迭代中获得popen()回调的最后一行?_Php_Laravel_Ffmpeg - Fatal编程技术网

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

Php 如何在每次迭代中获得popen()回调的最后一行?,php,laravel,ffmpeg,Php,Laravel,Ffmpeg,我正在尝试使用php和AJAX创建带有FFMPEG的进度条。当用户上传视频文件时,我希望能够显示当前百分比,直到完成。我已经设法使一切正常,但我有一个问题 数据返回我想要的,但它也返回以前迭代中的所有数据。。。就像它只是把所有的东西都堆在上面,而不是从以前的迭代中清除数据一样。我试着用tail工作,认为它只会返回最后一行,但它什么也不返回 以下是我正在使用的代码: encode.php $video_path = 'test.mp4'; $cmd = 'ffmpeg -i ' .

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

数据返回我想要的,但它也返回以前迭代中的所有数据。。。就像它只是把所有的东西都堆在上面,而不是从以前的迭代中清除数据一样。我试着用
tail
工作,认为它只会返回最后一行,但它什么也不返回

以下是我正在使用的代码:

encode.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);
正如您可以看到的数据堆栈一样,我只需要新的数据行,而不需要数据堆栈


**编辑**这已经被标记为重复,而不是我解释它是如何不同的,我想听听这是如何相同的事情?我不是在写日志文件,和大多数人一样,我觉得这不是一个好的解决方案。

在刷新方法之前,您需要干净的缓冲区


ob_clean

可能与我之前读到的内容重复,但它似乎不像我试图实现的那样工作,因为它们正在写入文本文件。我再看一看。我尝试了你的建议,得到
ob_clean():删除缓冲区失败。没有要删除的缓冲区($file,4096)。“\n”;@冲洗();ob_clean()非常感谢您的帮助,但我收到了相同的错误消息。
// 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