大.zip文件下载不完整

时间:2014-12-07 22:27:23

标签: php apache http http-headers zip

我是一个严厉的新手,但在发布之前我做了很多研究,所以我希望你能提供帮助。

我正在尝试提供托管在Apache服务器上的大型.zip文件,大约6.4 Gb。该文件在浏览器中显示完整下载,但实际上只下载了大约500Mb。这似乎是一个非常常见的问题,并且在网络上发现了很多其他帖子和信息,但这个问题对我来说一直存在。

Large Zip file offered for download using php

IE download incomplete even though it claims success

Large zip downloads failing only in IE

我一直在使用Chrome 39.0.2171.71进行测试,但我遇到了与FireFox和IE相同的问题。我认为我的文件比其他人发布的文件大得多,因此也许他们的解决方案可以帮助解决问题,但是没有解决根本问题。我有一个大约400Mb的第二个.zip文件,我成功使用相同的http标头。

我发现的最有用的文章是:http://perishablepress.com/http-headers-file-downloads/我已经从该来源复制了下面显示的大部分PHP,因为看起来这个网站上的其他海报已经完成了。

我也尝试过使用X-SendFile,但我不认为我的webhost安装了相应的Apache模块。我花了一整天的时间来完成这项工作,并且已经没想完了!我成功地使用了下载管理器,我不知道这只是偶然或者是什么,但我不想要求我的客户必须下载并安装一个单独的程序才能获得.zip文件。

<?php 
// HTTP Headers for ZIP File Downloads

// set example variables
$filename = "huge.zip";
$filepath = "****";

// http headers for zip downloads
// header("X-Sendfile: $filepath$filename");
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("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"".$filename."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filepath.$filename));
set_time_limit(0);
ob_end_flush();
@readfile($filepath.$filename);
?>

以下是我运行上面的php时的响应标题

Remote Address:76.162.142.242
Request URL:****/GetSW.php
Request Method:GET
Status Code:200 OK

Request Headers

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Authorization:Basic ******
Connection:keep-alive
Cookie:_ga=GA1.2.1176828605.1417985823
DNT:1
Host:www.teamursa.org
Referer:http://www.teamursa.org/****.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36

Response Headers

Cache-Control:public
Connection:Keep-Alive
Content-Description:File Transfer
Content-Disposition:attachment; filename="huge.zip"
Content-Length:6720560824
Content-Transfer-Encoding:binary
Content-Type:application/octet-stream
Date:Sun, 07 Dec 2014 22:16:57 GMT
Expires:0
Keep-Alive:timeout=3, max=120
Pragma:public
Server:Apache
X-Powered-By:PHP/5.2.17

2 个答案:

答案 0 :(得分:0)

您可能需要增加服务器的内存限制。在打开PHP标记

之后尝试以下内容

ini_set('memory_limit','16M');

并且从16M继续增长

答案 1 :(得分:-2)

我建议您尝试使用网络浏览器直接下载文件,这意味着您转到存储文件的地址。例如www.example.com/downloads/download.zip希望这有帮助