我想允许用户下载最大1GB的文件,但根据我的代码,只能下载113MB的文件......
header('Content-type: application/zip');
//open/save dialog box
header('Content-Disposition: attachment; filename="check.zip"');
//read from server and write to buffer
readfile('check.zip');
有谁能告诉我如何下载更大的文件?
答案 0 :(得分:4)
我会从你所说的内容中猜出你的内存错误。
在这种情况下,或许来自documentation的这个注释可能会引起关注:
注意:强>
即使在发送大文件时,readfile()也不会出现任何内存问题。如果遇到内存不足错误,请确保使用ob_get_level()关闭输出缓冲。
因此,检查ob_get_level()
并在必要时调用ob_end_flush()
以停止输出缓冲。
或者,您可以这样做:
$f = fopen("check.zip","rb");
while(!feof($f)) {
echo fgets($f);
flush();
}
另一种选择是:
header("Location: check.zip");
这会将浏览器重定向到check.zip
文件。由于是下载,因此现有页面不会受到影响。您甚至可以输出页面的其余部分,向用户说“您的下载将立即开始”。
答案 1 :(得分:0)
一次读取并回显文件一块,或者使用类似mod_sendfile的东西使它不是你的问题。
答案 2 :(得分:0)
将文件写入缓冲区块大小增加到文件的最大值。这将减少资源的利用率,您的下载工作正常。
编辑:
使用HTML5 webworkers下载大型。 Web工作者在后台工作,因此您可以下载大文件。