是否可以在远程文件上使用PHP readfile函数,该文件的大小未知且大小正在增加?这是场景:
我正在开发一个脚本,从第三方网站下载视频,同时将视频转码为MP3格式.然后通过readfile将此MP3传送给用户.
用于上述过程的查询如下:
wget -q -O- "VideoURLHere" | ffmpeg -i - "Output.mp3" > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
因此,文件同时被提取和编码.现在,当上述过程正在进行中时,我开始通过readfile将输出mp3发送给用户.问题是编码过程需要一些时间,因此取决于用户下载速度,readfile在整个文件被编码之前达到假定的EoF,导致用户接收部分内容/不完整文件.
我第一次尝试修复此问题是对用户下载应用速度限制,但这并非万无一失,因为编码时间和速度因负载而异,这仍然会导致部分下载.
那么有没有办法以这样的方式实现这个系统,我可以同时提供下载和编码,并保证将完整的文件发送给最终用户?
任何帮助表示赞赏.
编辑:回应彼得,我实际上正在使用fread(读取readfile_chunked):
<?php
function readfile_chunked($filename,$retbytes=true) {
$chunksize = 1*(1024*1024); // how many bytes per chunk
$totChunk = 0;
$buffer = '';
$cnt =0;
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
//usleep(120000); //Used to impose an artificial speed limit
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
if ($retbytes) {
$cnt += strlen($buffer); …Run Code Online (Sandbox Code Playgroud)