php断点续传原理,PHP断点续传的原理与实现

9c98fe03383ffeca78ca12f3181f2137.png

文章简单的介绍关于sql server 死锁 以及事物和 Range S-U,X-X的效率分析,有需要的参考下。

第一个部分代表了他锁定了一个索引范围,在这个范围内,所有索引使用 T 锁进行锁定;

第二个部分是而这个范...

PHP断点续传的原理与实现

断点续传主要是HTTP协议中的Content-Range报头。其理解如下:

Content-Range:响应资源的范围。可以在多次请求中标记请求的资源范围,在连接断开重新连接时,客户端只请求该资源未被下载的部分,而不是重新请求整个资源,实现了断点续传。迅雷就是基于这个原理,使用多线程分段读取网络上的资源,最后合并。关于PHP使用多线程实现断点续传稍后讨论。本文只实现简单的断点续传。

代码实现:

先定义一个函数 getRange() 这个函数用来处理 header中 Range 具体数据的处理

/** $file_size 文件大小 */ functiongetRange($file_size){ $range =isset($_SERVER['HTTP_RANGE'])?$_SERVER['HTTP_RANGE']:null; if(!empty($range)){ $range =preg_replace('/[\s|,].*/', '', $range); $range =explode('-',substr($range,6)); if(count($range) < 2 ) { $range[1] = $file_size; } $range =array_combine(array('start','end'),$range); if(empty($range['start'])) { $range['start'] = 0; } if (!isset($range['end']) || empty($range['end'])) { $range['end'] = $file_size; } return$range; } return null; }

假设文件的地址为 $file_path

$speed = 512;//此参数为下载最大速度 $pos =strrpos($file_path, "/"); $file_name =substr($file_path, $pos+1); $file_size =filesize($file_path); $ranges =getRange($file_size); $fh = fopen($file_path, "rb"); header('Cache-control: public'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$file_name); if ($ranges !=null) { header('HTTP/1.1 206 Partial Content'); header('Accept-Ranges: bytes'); header(sprintf('Content-Length: %u',$ranges['end'] - $ranges['start'])); header(sprintf('Content-Range: bytes %s-%s/%s', $ranges['start'],$ranges['end'], $file_size)); fseek($fh,sprintf('%u',$ranges['start'])); }else{ header("HTTP/1.1 200 OK"); header(sprintf('Content-Length:%s', $file_size)); } while(!feof($fh)) { echo fread($fh, round($speed*1024, 0)); ob_flush(); sleep(1); } ($fh != null)&& fclose($fh);

文章参考自:http://www.cnblogs.com/xyxiong/archive/2011/02/16/1956167.html

文章简单的介绍关于sql server 死锁 以及事物和 Range S-U,X-X的效率分析,有需要的参考下。

第一个部分代表了他锁定了一个索引范围,在这个范围内,所有索引使用 T 锁进行锁定;

第二个部分是而这个范...

...e cellspacing="0" cellpadding="0">

本文介绍下,在php中用range函数,创建包含指定范围单元的数组的例子,有需要的朋友参考下。之前,我们介绍过一篇 php快速创建数组的方法,其中就用到了php range()函数。

本文介绍下,...

本篇文章给大家带来的内容是关于基于http Range Requests协议实现分片下载的功能,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。本文基于http Range Requests协议,实现了分片下载的功能。使用场景...

...常来说,php支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现。

HTTP断点续传原理:

Http头 Range、Content-Range()

HTTP头中一般断点下载时才用到Range和Content-Range实体头,

Range用户请求头中,指定第...

... 029 * @var 030 */031 private $range; 032 /** 033 * 是否写入日志 034 * @var 035 */036 private $isLog = false; 037

...[];    // 参数作用域    private static $range = '_sys_';    // 设定配置参数的作用域    public static function rang

php 支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现。HTTP断点续传原理Http头 Range、Content-Range()HTTP头中一般断点下载时才用到Range和Content-Range实体头,Range用户请求头中,指定第一...

本篇文章给大家带来的内容是介绍css3的:out-of-range和:in-range伪类有什么用?(代码示例),让大家了解:out-of-range伪类和:in-range伪类的作用和使用方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

...理与实现 断点续传主要是HTTP协议中的Content-Range报头。其理解如下: Content-Range:响应资源的范围。可以在多次请求中标记请求的资源范围,在连接断开重新连接时,客户端只请求该资源未被下载的部分,而不...

...备的东西

http 状态码206的意思

响应头 "Accept-Ranges: bytes"

响应头 "Content-Range:bytes start-end/all"

fseek

ob_flush

http 状态码 206

请求的 header 必须包含一个 Range 字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值