0

我使用以下代码下载了大约 920MB 的文件,

set_time_limit(0);

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");

header("X-Sendfile: $zipname");                 // For Large Files

header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=\"".$zipname."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($directory_location . '/' . $zipname));
ob_end_flush();

readfile($directory_location . '/' . $zipname);

在此代码之前,我对以下链接进行了一些研究文件。它没有显示和传输速率或其他任何内容。我希望下载开始以大约 60Kbps 的速度提供所有文件(大或小)的文件

更新:还有一件事我注意到它没有显示任何刚刚执行的下载过程,并且在某个时间显示弹出窗口以选择位置后,在点击保存按钮后,它直接保存到计算机而没有任何下载过程窗口:(

请帮助我指导正确的方法。

4

1 回答 1

0

根据以上评论,有两种解决方案:

1)直接下载文件即可。您似乎没有进行任何验证,所以如果没有,那么只需将用户传递给文件以下载并让 apache 处理它。

2)如果您确实需要验证/预处理,请检查 mod_xsendfile - 添加标头是不够的,您实际上需要将 mod 添加到 apache。如果您在 Linux 中,则从源代码 ( https://tn123.org/mod_xsendfile/ ) 编译。如果您不在 Linux 中,那么适用于 Win x64 的 mod_xsendfile?有作者的回应说他可以提供二进制文件-但那是在 2010 年。网络上有一些建议-尽管我已经有一段时间没有看到它了,所以真的帮不上什么忙。

于 2013-10-21T10:32:21.777 回答