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


PHP print(fread(...)) Out of memory error

我试图使用以下代码来允许从我的网站下载:

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

它在20MB以下的文件上工作得很好,但我最近提供了一个150MB左右的文件,很快发现下载的文件不超过80MB。经过大量的研究,我在不完整的文件的最后几行中发现了一个内存不足的错误:

致命错误: Out of memory (assigned 82313216) (trying to分配81530881字节)

我的理解是print(read(…))从文件中分配和读取(1024*8)字节,通过print转储它们,然后利用相同的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);
    }