当我们使用 fopen() 命令时,PHP 加载整个文件


is php load whole file when we use fopen() command

我写了一个php脚本,可以帮助限制下载文件的速度和连接。我用了fopen()fseek()这样的东西:

$f = fopen($file, 'rb');
if($f){
    fseek($f,$start);//$start extracted from $_SERVER['HTTP_RANGE']
    while(!feof($f)){
        echo fread($f,$speed);//$speed is bytes per second
        flush();
        ob_flush();
        sleep(1);
    }
    fclose($f);
}
下载

过程可能需要几个小时才能完成,整个文件是否在内存中直到下载结束? 以及如何优化它?

不,fread使用内部缓冲区来流式传输数据(默认为 8KB),因此实际上只有文件的一小部分驻留在内存中。