我使用以下代码下载大约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);
在此代码之前,我使用以下链接Using X-Sendfile with Apache/PHP,Streaming a large file using PHP和Limit download speed using PHP进行了一些研究,但对我没什么帮助,因为文件下载仍然需要更多时间,只需(2MB)文件。它没有显示和转移率或其他任何东西。我希望下载开始提供大约60Kbps的文件,所有文件(大或小)
更新:还有一件事我注意到它没有显示正在执行的任何下载过程,并且在某段时间后显示弹出窗口以选择位置,并且在点击保存按钮后直接保存到计算机而没有任何下载过程窗口:(
答案 0 :(得分:0)
基于以上评论,有两种解决方案:
1)直接下载文件。您似乎没有进行任何验证,所以如果没有,那么只需将用户传递给文件进行下载,让apache处理它。
2)如果你确实需要验证/预处理,那么检查mod_xsendfile - 添加标题是不够的,你实际上需要将mod添加到apache。如果你在Linux中,那么从源代码编译(https://tn123.org/mod_xsendfile/)。如果你不在Linux中,那么mod_xsendfile for Win x64?会得到作者的回复,说他可以提供二进制文件 - 但那是在2010年。网上有一些建议 - 尽管我已经有一段时间看了它不能真正帮助更多。