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实现的随机广告显示代码
Jun 14 PHP
C# Assembly类访问程序集信息
Jun 13 PHP
PHP 面向对象 final类与final方法
May 05 PHP
PHP extract 将数组拆分成多个变量的函数
Jun 30 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
php+highchats生成动态统计图
May 21 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
PHP实现八皇后算法
May 06 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
用js实现in_array的方法
2013/11/05 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
JS中的phototype详解
2017/02/04 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
跟老齐学Python之??碌某?? target=
2014/09/12 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
python中with用法讲解
2020/02/07 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
VC++笔试题
2014/10/13 面试题
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
离婚被告答辩状
2015/05/22 职场文书
运动会开幕式致辞
2015/07/29 职场文书
退伍军人感言
2015/08/01 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
详解flex:1什么意思
2022/07/23 HTML / CSS