让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 字符转义 注意事项
May 27 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
PHP 批量更新网页内容实现代码
Jan 05 PHP
php 安全过滤函数代码
May 07 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
Feb 18 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
Nov 18 PHP
php+curl 发送图片处理代码分享
Jul 09 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
php结合web uploader插件实现分片上传文件
May 10 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
laravel框架 api自定义全局异常处理方法
Oct 11 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与MySQL交互使用详解
2006/10/09 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
javascript 写类方式之四
2009/07/05 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
Python字符转换
2008/09/06 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
Numpy的简单用法小结
2019/08/28 Python
Python实现动态循环输出文字功能
2020/05/07 Python
Python自动化操作实现图例绘制
2020/07/09 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
大专毕业生自我评价分享
2013/11/10 职场文书
财务与信息服务专业推荐信
2013/11/28 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
2014年物流工作总结
2014/11/25 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
师德师风培训感言
2015/08/03 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
高中美术教学反思
2016/02/17 职场文书