<?php
/**
* PHP-HTTP断点续传实现
* @param string $path: 文件所在路径
* @param string $file: 文件名
* @return void
*/
function download($path,$file) {
$real = $path.‘/‘.$file;
if(!file_exists($real)) {
return false;
}
$size = filesize($real);
$size2 = $size-1;
$range = 0;
if(isset($_SERVER[‘HTTP_RANGE‘])) {
header(‘HTTP /1.1 206 Partial Content‘);
$range = str_replace(‘=‘,‘-‘,$_SERVER[‘HTTP_RANGE‘]);
$range = explode(‘-‘,$range);
$range = trim($range[1]);
header(‘Content-Length:‘.$size);
header(‘Content-Range: bytes ‘.$range.‘-‘.$size2.‘/‘.$size);
} else {
header(‘Content-Length:‘.$size);
header(‘Content-Range: bytes 0-‘.$size2.‘/‘.$size);
}
header(‘Accenpt-Ranges: bytes‘);
header(‘application/octet-stream‘);
header("Cache-control: public");
header("Pragma: public");
//解决在IE中下载时中文乱码问题
$ua = $_SERVER[‘HTTP_USER_AGENT‘];
if(preg_match(‘/MSIE/‘,$ua)) {
$ie_filename = str_replace(‘+‘,‘%20‘,urlencode($file));
header(‘Content-Dispositon:attachment; filename=‘.$ie_filename);
} else {
header(‘Content-Dispositon:attachment; filename=‘.$file);
}
$fp = fopen($real,‘rb+‘);
fseek($fp,$range);
while(!feof($fp)) {
set_time_limit(0);
print(fread($fp,1024));
flush();
ob_flush();
}
fclose($fp);
}
/*End of PHP*/
相关文章
- 11-30写代码被打死系列
- 11-3011-代码块和变量的作用域
- 11-30动态 WebApi 引擎使用教程(3行代码完成动态 WebApi 构建)
- 11-30静态代码块和非静态代码块
- 11-30vue => vue项目里一行代码创建所有文件的指令
- 11-302019.06.05 ABAP EXCEL 操作类代码 OLE方式(模板下载,excel上传,内表下载)
- 11-30代码编辑神器Vim快捷学习
- 11-30代码安全 | 第十七期:对象只定义了Equals和Hashcode方法之一的漏洞
- 11-30用来处理gwdac网站爬取的实验数据的python代码
- 11-30AlphaCode能写代码了,人工智能会取代人吗