我正在尝试使用以下代码来允许从我的网站下载:
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))
此外,浏览器会相应地显示进度条,因此我知道文件大小正在正确发送。
答案 0 :(得分:0)
请检查:
if ($file!=false){
while(!feof($file)) {
print(fread($file, 1024*8));
flush();
if (connection_status()!=0) {
@fclose($file);
die();
}
}
@fclose($file);
}