PHP实现HTTP断点续传的方法


Posted in PHP onJune 17, 2015

本文实例讲述了PHP实现HTTP断点续传的方法。分享给大家供大家参考。具体实现方法如下:

<?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);
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
php反射应用示例
Feb 25 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
php表单处理操作
Nov 16 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
PHP生成推广海报的方法分享
Apr 22 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 PHP
如何用PHP实现多线程编程
May 26 PHP
PHP实现在线阅读PDF文件的方法
Jun 17 #PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 #PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 #PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 #PHP
php正则替换处理HTML页面的方法
Jun 17 #PHP
PHP排序算法类实例
Jun 17 #PHP
php准确获取文件MIME类型的方法
Jun 17 #PHP
You might like
php intval的测试代码发现问题
2008/07/27 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
大学生实习证明范本
2014/01/15 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
留学经费担保书
2014/05/12 职场文书
本溪水洞导游词
2015/02/11 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书