0

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

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

4

3 回答 3

4

我将从您所说的内容中猜测您遇到了“内存不足”错误。

在这种情况下,也许文档中的这个注释可能会引起人们的兴趣:

笔记:

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文件。由于是下载,现有页面不会受到影响。您甚至可以输出页面的其余部分,向用户说“您的下载将立即开始”之类的内容。

于 2012-05-05T05:59:27.137 回答
0

一次读取并回显文件一个块,或者使用类似 mod_sendfile 的东西使它不是你的问题。

于 2012-05-05T05:55:01.177 回答
0

将文件写入缓冲区块大小增加到文件的最大值。这将降低资源的利用率,并且您的下载工作正常。

编辑:

使用 HTML5 webworkers 下载大容量。Webworkers 在后台工作,因此您可以下载大文件。

于 2012-05-05T05:59:26.060 回答