All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
asp.net实现站点RSS功能_[Asp.Net教程]
PHP将将,XML,映射为,HTML的代码实例_php资料_编程技术
新手教程:手把手教你学Web,Services,教程_[Asp.Net教程]
ASP.NET,2.0,Membership原理及应用_.net资料_编程技术
HTML教程-收集的常用的HTML标签(4)_[Html教程]
总结asp.net回发或回调参数无效解决方法_[Asp.Net教程]
利用继承来制作点击提交按钮后按钮变灰_[Asp.Net教程]
SEO网站设计中不可忽略的细节_百度优化_seo学堂
新瓶旧酒ASP.NET,AJAX(10),-,客户端脚本编程(Sys.Services命名空间下的)_[Asp.Net教程]
客户端回调实现gridView无刷新分页_.net资料_编程技术
Reading number is top 10 pictures
Female model behind the bitterness, often being overcharged2
西游四格漫画(三)
More attractive than sora aoi2
A man's favorite things12
A man's favorite things7
Desktop Wallpapers1
007 James. bond's new lover
Get girl by your hand
教你做读书笔记
泳装名模阿尔贝特妮写真
Download software ranking
Unix video tutorial4
Sora aoi's film--cangkong_Blue.Sky
White deer villiage
小黑猫大战两米大花蛇
徐若瑄成名作“魔鬼天使”
Boxer vs Yellow2
Boxer vs Yellow1
Unix video tutorial20
Twenty piece of palm leaf
C#程序员参考手册
归海一刀 published in(发表于) 2014/2/17 7:46:57 Edit(编辑)
让PHP支持断点续传文件_[PHP教程]

让PHP支持断点续传文件_[PHP教程]

让PHP支持断点续传文件_[PHP教程]

现在的很多服务器都支持断点续传去下载软件,同时很多下载软件也是断点续传,怎么样才能让PHP也能实现断电续传功能呢?请先看下面的代码。


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);


其实说简单点就是通过这个变量_SERVER['HTTP_RANGE']取得用户请求的文件的range,然后程序去控制文件的输出。比如第一次请求一个文件的从0到999字节,第二次请求1000到1999字节,以此类推,每次请求1000字节的内容,然后程序通过fseek函数去取得对应的文件位置,然后输出。


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


range = 0;
if(readmod == 4) {
dheader('Accept-Ranges: bytes');
if(!empty(_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));
}
}


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


来源:PHPQ.Net







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.