一个支持断点续传的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
*/

最新文章

  1. 学记:为spring boot写一个自动配置
  2. jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
  3. for循环立即执行和不立即执行,js闭包
  4. Bootstrap<基础二十七> 多媒体对象(Media Object)
  5. iOS 8下使用xib/storybord AutoLayout导致的分割线问题
  6. IOS - 控件的AutoresizingMask属性
  7. angularJS中的$apply(),$digest(),$watch()
  8. linux----关于定位和查找
  9. java引用类型
  10. 快速、直接的XSS漏洞检测爬虫 – XSScrapy
  11. 基于Qt的第三方库和控件
  12. Eclipse启动Tomcat报错,系统缺少本地apr库
  13. 5JS树形结构菜单和jQuery版
  14. 使用.Net+非关系型数据库MongoDB 实现LBS商家按距离排序_按离我最近排序
  15. 通过zabbix的API接口获取服务器列表
  16. ElasticSearch6.5.0 【安装IK分词器】
  17. zabbix之 自动发现磁盘io util 监控
  18. java.util.ConcurrentModificationException详解
  19. sgu 191 Exhibition
  20. 解决编译Apache出现的问题:configure: error: APR not found

热门文章

  1. 常用SNS开源系统比较
  2. HDU 1083 Courses(最大匹配模版题)
  3. (2015年郑州轻工业学院ACM校赛题) B迷宫
  4. uboot mkimage使用详解
  5. convex optimization
  6. 【转】HP(惠普)大中华区总裁孙振耀退休感言
  7. HTTP学习笔记4-请求与响应结构例子
  8. 使用Jekyll搭建免费的Github Pages个人博客
  9. 最长回文子串(百度笔试题和hdu 3068)
  10. nginx 1.安装