新写PHP HTTP断点续传类文件代码
2024-10-16 16:01:12
一个支持断点续传的PHP文件下载类文件,调用方法简单,类代码简洁,可记忆上次的下载的节点,实现累积下载,类名称download,类代码如下:
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);
} /**
* 参数说明:
* @param string $path: 文件路径
* @param string $file: 文件名称
* @return void
*/
最新文章
- 学记:为spring boot写一个自动配置
- jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
- for循环立即执行和不立即执行,js闭包
- Bootstrap<;基础二十七>; 多媒体对象(Media Object)
- iOS 8下使用xib/storybord AutoLayout导致的分割线问题
- IOS - 控件的AutoresizingMask属性
- angularJS中的$apply(),$digest(),$watch()
- linux----关于定位和查找
- java引用类型
- 快速、直接的XSS漏洞检测爬虫 – XSScrapy
- 基于Qt的第三方库和控件
- Eclipse启动Tomcat报错,系统缺少本地apr库
- 5JS树形结构菜单和jQuery版
- 使用.Net+非关系型数据库MongoDB 实现LBS商家按距离排序_按离我最近排序
- 通过zabbix的API接口获取服务器列表
- ElasticSearch6.5.0 【安装IK分词器】
- zabbix之 自动发现磁盘io util 监控
- java.util.ConcurrentModificationException详解
- sgu 191 Exhibition
- 解决编译Apache出现的问题:configure: error: APR not found