让PHP支持断点续传的源码_php技巧

比如第一次请求一个文件的从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));
}
}

时间: 2024-09-17 04:42:11

让PHP支持断点续传的源码_php技巧的相关文章

php实现的支持断点续传的文件下载类_php技巧

本文实例讲述了php实现的支持断点续传的文件下载类及其用法,是非常实用的技巧.分享给大家供大家参考.具体方法如下: 通常来说,php支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现. HTTP断点续传原理: Http头 Range.Content-Range() HTTP头中一般断点下载时才用到Range和Content-Range实体头, Range用户请求头中,指定第一个字节的位置和最后一个字节的位置,如(Range:200-300) Content-Range用

将酷狗krc歌词解析并转换为lrc歌词php源码_php技巧

最近在进行一次对酷狗音乐歌词采集时发现酷狗音乐的歌词直接浏览都是"乱码",自己平时所见的歌词都是lrc格式的文本,这种酷狗专用的krc格式的显然是经过特别处理过的,平时用酷狗听音乐也没仔细看他的歌词有什么不同,只是与天天静听等不同的是可以逐字高亮显示歌词. 对酷狗的flash播放器进行反编译,发现这段krc解密的ActionScript代码: public function loaderCompleteHandler(param1:ByteArray) : void{ this.new

来自phpguru得Php Cache类源码_php技巧

Cache的作用不用说大家都知道咯,这些天也面试了一些人,发现很多人框架用多了,基础都忘记了,你问一些事情,他总是说框架解决了,而根本不明白是怎么回事,所以也提醒大家应该注意平时基础知识的积累,之后对一些问题才能游刃有余. 群里也有些朋友对基础知识很不屑,总说有能力就可以了,基础知识考不出来什么.对于这样的观点,我一直不苟同. 这个只是一点感概罢了. 下面看正题,介绍一个php的Cache类: 贴一下代码吧:下面也有下载地址,其实很简单,重要的是学习 复制代码 代码如下: <?php /** *

深入PHP购物车模块功能分析(函数讲解,附源码)_php技巧

一,购物车概述购物车是为消费者在网上购物中提供一个临时存储商品的地方.其主要功能包括:添加商品.删除商品.更改商品数量.商品金额小计.商品金额总计和清空购物车:还包括生成订单.订单打印.订单预览.提交订单和取消购物等.购物车的操作流程:首先,登录到网站中浏览商品:然后,购买指定的商品,进入购物车页面中,在该页面可以实现更改商品数量.删除商品.清空购物车.继续购物等:最后,填写收货人信息,生成订单,订单打印.预览,提交订单等操作. 二,热点关键技术1,Smarty模块的安装配置smarty是一个使

PHP生成唯一的促销/优惠/折扣码(附源码)_php技巧

每一个电子商务网站,现在有一种或多种类型的优惠/折扣/优惠券系统,给大家分享一下如何在PHP生成唯一的促销/折扣码.主要是实现一个优惠码系统,可用于跟踪用户来自某些特定的来源,例如有些主机促销的时候链接到别的页面会有优惠码生成,还有更多的促销代码等.因此,今天将讨论这样一个优惠码的实现过程 考虑的需求 代码应该很容易记住,因此保持短的长度是一个好主意,使用户可以很容易地记住它 没有特殊字符!它应该是字母数字组合,因为它会永远是为用户更容易记住 长度推广/折扣代码的正确.没有一个标准的长度,因为它

简单的cookie计数器实现源码_php技巧

复制代码 代码如下: <?php  if (!empty ($_COOKIE['example'] ))             $example = ++$_COOKIE['example'] ;        else $example = 1 ;              setcookie("example",$example,time()+54000);?> 复制代码 代码如下: <html><head><meta http-equi

PHP实现邮件群发的源码_php技巧

复制代码 代码如下:  <?php  // 请求 PHPmailer类 文件  require_once("class.phpmailer.php");   //发送Email函数  function smtp_mail ( $sendto_email, $subject, $body, $extra_hdrs, $user_name) {  $mail = new PHPMailer();   $mail->IsSMTP();                       

java 源码-Java项目源码阅读技巧

问题描述 Java项目源码阅读技巧 拿到一个项目的源代码,没有项目文档,注释很少,项目用的struts,hibernate,spring框架,该如何快速掌握整个项目的脉络,一点头绪都没有不知从哪下手!求大神指点 解决方案 把项目先运行起来,看看页面大致显示的什么内容. 然后再根据需求去熟悉对于的源码.

在Windows下编译Cef3.2623并加入mp3、mp4支持(附带源码包和最终DLL)

转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/54193842 之前把离屏渲染模式的Cef3作为控件嵌入到项目窗体里.现在因为工作需要,为了得到支持mp3.mp4的cef32和64位版本,我得编译cef3的2623版本(最后一个支持xp的cef).没编译之前就知道这是个大坑,果不其然,花了一星期才编译出来.看了不少网上的教程,感觉没有特别完整的,特地把自己的编译过程记录下来,以备后用. 需要专门吐槽一下中国防火墙,一星