强制在共享服务器上下载大文件

时间:2011-09-07 16:03:36

标签: php download content-type content-disposition force-download

我正在尝试在某人的网站上添加大型视频文件(大约300MB)的下载链接,但不幸的是他们在共享主机上(我告诉他们如果有很多人下载它们就必须升级) 。我不希望人们必须“保存目标为止”,我通常使用此代码强制下载:

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // some day in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename={$file}");
header("Content-Transfer-Encoding: binary");
readfile($file);

这适用于较小的文件,但不适用于较大的文件,即使在出现错误后,我也没有错误,也没有错误日志。我确定这与共享内存限制(或可能是超时)有关,但有人知道我如何强制在共享服务器上下载大文件,理想情况下没有javascript,因为我确定我无法将内存限制设置得足够高?

非常感谢,

戴夫

1 个答案:

答案 0 :(得分:0)

通常的解决方案是自己进行文件输出,让Web服务器自己的缓冲区处理:

$fh = fopen($file, 'rb') or die("Unable to open $file");
while($data = fread($fh, 10240)) { // 10kbyte chunks.
   echo $data;
}
fclose($fh);