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中date()日期函数有关参数整理
Jul 19 PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 PHP
PHP中设置时区方法小结
Jun 03 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
php图片上传类 附调用方法
May 15 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 PHP
php上传excel表格并获取数据
Apr 27 PHP
php查询内存信息操作示例
May 09 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 PHP
php的lavarel框架中join和orWhere的用法
Dec 28 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里得到前天和昨天的日期的代码
2007/08/16 PHP
PHP Socket 编程
2010/04/09 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
php中取得文件的后缀名?
2012/02/20 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
PHP curl使用实例
2015/07/02 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
javascript实现点击提交按钮后显示loading的方法
2015/07/03 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
Python文件操作基本流程代码实例
2017/12/11 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
python 获取字符串MD5值方法
2018/05/29 Python
python 读取文件并替换字段的实例
2018/07/12 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
Python更换pip源方法过程解析
2020/05/19 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
收入证明怎么写
2015/06/12 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server