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+MYSQL的文章管理系统(二)
Oct 09 PHP
关于时间计算的结总
Dec 06 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 PHP
PHP网站备份程序代码分享
Jun 10 PHP
简单的php写入数据库类代码分享
Jul 26 PHP
php标签云的实现代码
Oct 10 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
Yii配置文件用法详解
Dec 04 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
php 中htmlentities导致中文无法查询问题
Sep 10 PHP
php优化查询foreach代码实例讲解
Mar 24 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写入数据库类代码分享
2011/07/26 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
php计算税后工资的方法
2015/07/28 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
Django中使用group_by的方法
2015/05/26 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
python构建指数平滑预测模型示例
2019/11/21 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
利用python爬取有道词典的方法
2020/12/08 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
大学生毕业求职信
2014/06/12 职场文书
我的中国梦口号
2014/06/16 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS