如何允许下载1GB的文件

时间:2012-05-05 05:48:29

标签: php

我想允许用户下载最大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');

有谁能告诉我如何下载更大的文件?

3 个答案:

答案 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工作者在后台工作,因此您可以下载大文件。