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 相关文章推荐
在mysql数据库原有字段后增加新内容
Nov 26 PHP
php 归并排序 数组交集
May 10 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
Zend Studio去除编辑器的语法警告设置方法
Oct 24 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
PHP 前加at符合@的作用解析
Jul 31 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
May 06 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 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
PHPAnalysis中文分词类详解
2014/06/13 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
Django 外键的使用方法详解
2019/07/19 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
创业计划书中要认真思考的问题
2013/12/28 职场文书
村党支部书记承诺书
2014/05/29 职场文书
党员证明信
2015/06/19 职场文书
房产遗嘱范本
2015/08/06 职场文书
详解nginx location指令
2022/01/18 Servers
宝塔更新Python及Flask项目的部署
2022/04/11 Python
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript