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 相关文章推荐
开源SNS系统-ThinkSNS
May 18 PHP
php购物网站支付paypal使用方法
Nov 28 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
PHP伪静态Rewrite设置之APACHE篇
Jul 30 PHP
了解PHP的返回引用和局部静态变量
Jun 04 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
php session的锁和并发
Jan 22 PHP
php fseek函数读取大文件两种方法
Oct 12 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
我整理的PHP 7.0主要新特性
2016/01/07 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
javascript使用Promise对象实现异步编程
2016/03/01 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
vue全屏事件开发详解
2020/06/17 Javascript
在python中使用with打开多个文件的方法
2019/01/07 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
python创建n行m列数组示例
2019/12/02 Python
python如何查看安装了的模块
2020/06/23 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
公司行政经理岗位职责
2013/12/24 职场文书
思想品德课教学反思
2014/02/10 职场文书
有关爱国演讲稿
2014/05/07 职场文书
用电申请报告范文
2015/05/18 职场文书
教师工作证明范本
2015/06/12 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers