解决大型php文件下载,http下载的详细方法
下面是源代码:
复制代码代码如下所示:
< PHP
可用美元=1。TMP ; / /临时下载的文件名
$ outfile =.xls用户订单; / /下载文件名保存到客户端
file_extension美元= strtolower(substr(strrchr(美元可用,,
/ / echo源文件;
如果(!Ereg({ TMP | txt | RAR | PDF | DOC }
/ /找到
如果(!is_file($可用)){
死亡()404文件没有找到!;
}
$ len =文件大小(合源文件); / /获取文件大小
为文件名= basename(合源文件); / /获取文件名
outfile_extension美元= strtolower(substr(strrchr($ outfile,,
根据扩展点浏览器输出格式
开关($ outfile_extension){
案例exe:
C型=应用美元/字节流;
打破;
案例zip:
美元=应用型/邮编;
打破;
案例MP3:
C型=音频美元/ MPEG ;
打破;
案例英里:
C型=美元视频/视频;
打破;
案例AVI:
C型=视频美元/ x-msvideo ;
打破;
违约:
C型=应用美元/力下载;
}
开始写标题
标题(缓存控件);
标题(缓存控件:公共);
设置输出浏览器格式
标题(内容类型:$ C型);
标题()内容配置:附件;文件名。为导出的文件);
标头(接受范围:字节);
文件大小=美元(合源文件);
/ /如果$ _server { 'http_range}参数
如果(isset($ _server { 'http_range ' })){
范围域头域的范围标头字段可以请求实体的一个或多个子范围。
例如,
代表第一个500字节:字节= 0-499
代表第二500字节:字节= 500-999
最后500个字节:字节= 500
指示500字节之后的范围:字节= 500—
第一个和最后一个字节:字节= 0-0,1
同时,指定了几个范围:字节= 500-600601-999
但是,服务器可以忽略该请求。如果条件得到包含范围请求头,响应将返回的状态代码206(partialcontent)而不是200(OK)。
* /
字节= 4390912至_server { 'http_range} /值后再连接断点
列表($,$范围)=爆炸( =)
如果是,下载丢失的部分
str_replace($美元范围,范围,); / /这句话什么…
美元:美元=大小1; / /文件的总字节数
美元:美元new_length =美元范围; / /得到下一个下载的长度
页眉(1.1部分内容);
标题(内容长度:new_length美元); / /输入长度
标题(内容范围:字节范围: /美元美元美元大小);当 / /内容范围:字节4908618-4988927 / 4988928 95%
{人}
第一个连接
美元:美元=大小1;
标题(内容范围:字节0美元/美元:大小); / /内容范围:字节0-4988927 / 4988928
标题(内容长度:。$大小);总输出
}
打开文件
$ FP = fopen($ 源文件
设置指针位置
fseek(fp美元,美元);
输出/不真实
而(!Feof($ FP)){
设置文件的最大执行时间
(0)set_time_limit;
打印(fread($ FP,1024×8)); / /输出文件
(刷新);输出缓冲区
ob_flush();
}
Fclose($ FP);
出口();