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

时间:2012-01-02 19:15:25

标签: 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。经过大量研究后,我发现在不完整文件的最后几行中出现内存不足错误:

  

致命错误:内存不足(已分配82313216)(尝试过   分配81530881字节)

我理解print(fread(...))正在从文件中分配和读取(1024 * 8)字节,通过print转储它们,然后利用相同的8192字节读取/转储下一节的文件。

显然我有问题,有人能帮我理解这里真正发生的事吗?问题的任何可能的解决方法?谢谢!

更新:错误消息引用第302行,即:

while(!feof($file)) 

此外,浏览器会相应地显示进度条,因此我知道文件大小正在正确发送。

1 个答案:

答案 0 :(得分:0)

请检查:

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