让PHP支持断点续传的源码


Posted in PHP onMay 16, 2010

比如第一次请求一个文件的从0到999字节,第二次请求1000到1999字节,以此类推,每次请求1000字节的内容,然后程序通过fseek函数去取得对应的文件位置,然后输出。

$fname = './05e58c19552bb26b158f6621a6650899'; 
$fp = fopen($fname,'rb'); 
$fsize = filesize($fname); 
if (isset($_SERVER['HTTP_RANGE']) && ($_SERVER['HTTP_RANGE'] != "") && preg_match("/^bytes=([0-9]+)-$/i", $_SERVER['HTTP_RANGE'], $match) && ($match[1] < $fsize)) { 
$start = $match[1]; 
} else { 
$start = 0; 
} 
@header("Cache-control: public"); 
@header("Pragma: public"); 
if ($start > 0) { 
fseek($fp, $start); 
Header("HTTP/1.1 206 Partial Content"); 
Header("Content-Length: " . ($fsize - $start)); 
Header("Content-Ranges: bytes" . $start . "-" . ($fsize - 1) . "/" . $fsize); 
} else { 
header("Content-Length: $fsize"); 
Header("Accept-Ranges: bytes"); 
} 
@header("Content-Type: application/octet-stream"); 
@header("Content-Disposition: attachment;filename=1.rm"); 
fpassthru($fp);

大家也可以看下Discuz!论坛软件的attachment.php文件是如何实现断点续传的。请看代码:

也是通过$_SERVER['HTTP_RANGE']取得用户请求的文件的range,具体的大家可以查看其源码分析下。这里我就当抛砖引玉了。

$range = 0; 
if($readmod == 4) { 
dheader('Accept-Ranges: bytes'); 
if(!emptyempty($_SERVER['HTTP_RANGE'])) { 
list($range) = explode('-',(str_replace('bytes=', '', $_SERVER['HTTP_RANGE']))); 
$rangesize = ($filesize - $range) > 0 ? ($filesize - $range) : 0; 
dheader('Content-Length: '.$rangesize); 
dheader('HTTP/1.1 206 Partial Content'); 
dheader('Content-Range: bytes='.$range.'-'.($filesize-1).'/'.($filesize)); 
} 
}
PHP 相关文章推荐
php中的时间显示
Jan 18 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 PHP
php动态函数调用方法
May 21 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
YII Framework框架教程之缓存用法详解
Mar 14 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
Aug 30 PHP
如何用Laravel包含你自己的帮助函数
May 27 PHP
php 获取一个月第一天与最后一天的代码
May 16 #PHP
PHP 缓存实现代码及详细注释
May 16 #PHP
PHP 防恶意刷新实现代码
May 16 #PHP
PHP 全角转半角实现代码
May 16 #PHP
php5.3 废弃函数小结
May 16 #PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 #PHP
php 中文和编码判断代码
May 16 #PHP
You might like
php读取html并截取字符串的简单代码
2009/11/30 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
python中使用enumerate函数遍历元素实例
2014/06/16 Python
Python模拟用户登录验证
2017/09/11 Python
python正则表达式re之compile函数解析
2017/10/25 Python
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
快速创建python 虚拟环境
2020/11/28 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
介绍一下RMI的基本概念
2016/12/17 面试题
我的中国梦演讲稿高中篇
2014/08/19 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
运动会广播稿200字
2014/10/18 职场文书
初中美术教学反思
2016/02/17 职场文书
Python可视化神器pyecharts绘制水球图
2022/07/07 Python
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript