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 09 PHP
php pcntl_fork和pcntl_fork 的用法
Apr 13 PHP
在命令行下运行PHP脚本[带参数]的方法
Jan 22 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
深入理解php的MySQL连接类
Jun 07 PHP
修改php.ini以达到屏蔽错误信息并记录日志
Jun 16 PHP
PHP中防止SQL注入方法详解
Dec 25 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 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
基于mysql的论坛(5)
2006/10/09 PHP
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
四个PHP非常实用的功能
2015/09/29 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
python僵尸进程产生的原因
2017/07/21 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
为什么要使用servlet
2016/01/17 面试题
绿化先进工作者事迹材料
2014/01/30 职场文书
企业文化口号
2014/06/12 职场文书
课外访万家心得体会
2014/09/03 职场文书
2014年民警工作总结
2014/11/25 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
优秀大学生申请书
2019/06/24 职场文书