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之require/include顺序 推荐
Jan 02 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
Mar 05 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
PHP中each与list用法分析
Jan 08 PHP
laravel学习教程之关联模型
Jul 30 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
如何在PHP中使用数组
Jun 09 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
laravel安装zend opcache加速器教程
2015/03/02 PHP
smarty模板引擎基础知识入门
2015/03/30 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
jQuery getJSON()+.ashx 实现分页(改进版)
2013/03/28 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
py2exe 编译ico图标的代码
2013/03/08 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
超市营业员求职简历的自我评价
2013/10/17 职场文书
副总经理任命书
2014/06/05 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
教师理论学习心得体会
2016/01/21 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python