我试图使用以下代码来允许从我的网站下载:
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);
}