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 相关文章推荐
phpMyAdmin下载、安装和使用入门教程
May 31 PHP
php jq jquery getJSON跨域提交数据完整版
Sep 13 PHP
php过滤敏感词的示例
Mar 31 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
Jun 12 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
我的论坛源代码(四)
2006/10/09 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
再谈Javascript中的异步以及如何异步
2016/08/19 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
化学教师自荐信范文
2013/12/28 职场文书
人事专员的职责
2014/02/26 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
2015年派出所工作总结
2015/04/24 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
python cv2图像质量压缩的算法示例
2021/06/04 Python
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS