PHP打印(fread(…)内存不足错误

PHP打印(fread(…)内存不足错误,php,download,out-of-memory,readfile,fread,Php,Download,Out Of Memory,Readfile,Fread,我正在尝试使用以下代码允许从我的网站下载: while(!feof($file)) { print(fread($file, 1024*8)); flush(); if (connection_status()!=0) { @fclose($file); die(); } } @fclose($file); 它在20MB以下的文件上工作得很好,但我最近提供了一个150MB左右的文件,很快发现下载的文件不超过80MB。经过大量研究,我在不完

我正在尝试使用以下代码允许从我的网站下载:

while(!feof($file)) {
    print(fread($file, 1024*8));
    flush();
    if (connection_status()!=0) {
      @fclose($file);
      die();
    }
}
@fclose($file);
它在20MB以下的文件上工作得很好,但我最近提供了一个150MB左右的文件,很快发现下载的文件不超过80MB。经过大量研究,我在不完整文件的最后几行中发现了内存不足错误:

致命错误:分配的内存不足。82313216尝试 分配81530881字节

我的理解是printfread。。。正在从文件中分配和读取1024*8字节,通过打印转储它们,然后使用相同的8192字节读取/转储文件的下一部分

显然我有点不对劲,有人能帮我理解这里到底发生了什么吗?有没有解决这个问题的办法?谢谢

更新:错误消息指的是第302行,即:

while(!feof($file)) 
此外,浏览器会适当地显示进度条,因此我知道文件大小发送正确。

请检查:

    if ($file!=false){
      while(!feof($file)) {
        print(fread($file, 1024*8));
        flush();
        if (connection_status()!=0) {
          @fclose($file);
          die();
        }
      }
      @fclose($file);
    }

为什么不使用readfile作为旁注:通过PHP传递静态内容通常是个坏主意,因为这是可能的。它提到试图分配[~80MB]。您确定,这确实是导致错误的代码吗?错误消息通常应该指出确切的行…:-?您使用的是EXPUT缓冲吗?即使您试图将整个文件输出为小块,它仍然会将整个文件吸进内存。我的印象是,readfile对于较大的文件来说是一个不好的选项,这就导致了我使用此函数。这不是真的吗?是的,错误消息指的是第302行,即:while!发现$fileProblem的feof!ob_start在这段代码之前被调用,由于if语句中的一个bug而没有结束。因此,输出缓冲是罪魁祸首,尽管我不知道它仍然处于启用状态。MarcB搞定了。。。我如何给你答案?