麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > PHP > 正文

php實(shí)現(xiàn)的支持?jǐn)帱c(diǎn)續(xù)傳的文件下載類_0

2020-03-22 20:22:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
本文實(shí)例講述了php實(shí)現(xiàn)的支持?jǐn)帱c(diǎn)續(xù)傳的文件下載類及其用法,是非常實(shí)用的技巧。分享給大家供大家參考。具體方法如下:通常來(lái)說(shuō),php支持?jǐn)帱c(diǎn)續(xù)傳,主要依靠HTTP協(xié)議中 header HTTP_RANGE實(shí)現(xiàn)。HTTP斷點(diǎn)續(xù)傳原理:Http頭 Range、Content-Range()
HTTP頭中一般斷點(diǎn)下載時(shí)才用到Range和Content-Range實(shí)體頭,
Range用戶請(qǐng)求頭中,指定第一個(gè)字節(jié)的位置和最后一個(gè)字節(jié)的位置,如(Range:200-300)
Content-Range用于響應(yīng)頭請(qǐng)求下載整個(gè)文件: GET /test.rar HTTP/1.1
Connection: close
Host: 116.1.219.219
Range: bytes=0-801 //一般請(qǐng)求下載整個(gè)文件是bytes=0- 或不用這個(gè)頭一般正常回應(yīng):HTTP/1.1 200 OK
Content-Length: 801
Content-Type: application/octet-stream
Content-Range: bytes 0-800/801 //801:文件總大小FileDownload.html' target='_blank'>class.php類文件代碼如下: php /** php下載類,支持?jǐn)帱c(diǎn)續(xù)傳 * Date: 2013-06-30 * Author: test * Ver: 1.0 * Func: * download: 下載文件 * setSpeed: 設(shè)置下載速度 * getRange: 獲取header中Range class FileDownload{ // class start private $_speed = 512; // 下載速度 /** 下載 * @param String $file 要下載的文件路徑 * @param String $name 文件名稱,為空則與下載的文件名稱一樣 * @param boolean $reload 是否開(kāi)啟斷點(diǎn)續(xù)傳 public function download($file, $name='', $reload=false){ if(file_exists($file)){ if($name==''){ $name = basename($file); $fp = fopen($file, 'rb'); $file_size = filesize($file); $ranges = $this- getRange($file_size); header('cache-control:public'); header('content-type:application/octet-stream'); header('content-disposition:attachment; filename='.$name); if($reload && $ranges!=null){ // 使用續(xù)傳 header('HTTP/1.1 206 Partial Content'); header('Accept-Ranges:bytes'); // 剩余長(zhǎng)度 header(sprintf('content-length:%u',$ranges['end']-$ranges['start'])); // range信息 header(sprintf('content-range:bytes %s-%s/%s', $ranges['start'], $ranges['end'], $file_size)); // fp指針跳到斷點(diǎn)位置 fseek($fp, sprintf('%u', $ranges['start'])); }else{ header('HTTP/1.1 200 OK'); header('content-length:'.$file_size); while(!feof($fp)){ echo fread($fp, round($this- _speed*1024,0)); ob_flush(); //sleep(1); // 用于測(cè)試,減慢下載速度 ($fp!=null) && fclose($fp); }else{ return ''; /** 設(shè)置下載速度 * @param int $speed public function setSpeed($speed){ if(is_numeric($speed) && $speed 16 && $speed 4096){ $this- _speed = $speed; /** 獲取header range信息 * @param int $file_size 文件大小 * @return Array private function getRange($file_size){ if(isset($_SERVER['HTTP_RANGE']) && !empty($_SERVER['HTTP_RANGE'])){ $range = $_SERVER['HTTP_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(empty($range['end'])){ $range['end'] = $file_size; return $range; return null; } // class end
$flag = $obj- download($file, $name); //$flag = $obj- download($file, $name, true); // 斷點(diǎn)續(xù)傳 if(!$flag){ echo 'file not exists';
斷點(diǎn)續(xù)傳測(cè)試方法:使用linux wget命令去測(cè)試下載, wget -c -O file http://xxx1.先關(guān)閉斷點(diǎn)續(xù)傳$flag = $obj- download($file, $name);
test@ubuntu:~/Downloads$ wget -O test.rar http://demo.test.com/demo.php --2013-06-30 16:52:44-- http://demo.test.com/demo.php 正在解析主機(jī) demo.test.com... 127.0.0.1 正在連接 demo.test.com|127.0.0.1|:80... 已連接。 已發(fā)出 HTTP 請(qǐng)求,正在等待回應(yīng)... 200 OK 長(zhǎng)度: 10445120 (10.0M) [application/octet-stream] 正在保存至: “test.rar” 30% [============================ ] 3,146,580 513K/s 估時(shí) 14s test@ubuntu:~/Downloads$ wget -c -O test.rar http://demo.test.com/demo.php --2013-06-30 16:52:57-- http://demo.test.com/demo.php 正在解析主機(jī) demo.test.com... 127.0.0.1 正在連接 demo.test.com|127.0.0.1|:80... 已連接。 已發(fā)出 HTTP 請(qǐng)求,正在等待回應(yīng)... 200 OK 長(zhǎng)度: 10445120 (10.0M) [application/octet-stream] 正在保存至: “test.rar” 30% [============================ ] 3,146,580 515K/s 估時(shí) 14s 可以看到,wget -c不能斷點(diǎn)續(xù)傳2.開(kāi)啟斷點(diǎn)續(xù)傳$flag = $obj- download($file, $name, true);
test@ubuntu:~/Downloads$ wget -O test.rar http://demo.test.com/demo.php --2013-06-30 16:53:19-- http://demo.test.com/demo.php 正在解析主機(jī) demo.test.com... 127.0.0.1 正在連接 demo.test.com|127.0.0.1|:80... 已連接。 已發(fā)出 HTTP 請(qǐng)求,正在等待回應(yīng)... 200 OK 長(zhǎng)度: 10445120 (10.0M) [application/octet-stream] 正在保存至: “test.rar” 20% [================== ] 2,097,720 516K/s 估時(shí) 16s test@ubuntu:~/Downloads$ wget -c -O test.rar http://demo.test.com/demo.php --2013-06-30 16:53:31-- http://demo.test.com/demo.php 正在解析主機(jī) demo.test.com... 127.0.0.1 正在連接 demo.test.com|127.0.0.1|:80... 已連接。 已發(fā)出 HTTP 請(qǐng)求,正在等待回應(yīng)... 206 Partial Content 長(zhǎng)度: 10445121 (10.0M),7822971 (7.5M) 字節(jié)剩余 [application/octet-stream] 正在保存至: “test.rar” 100%[++++++++++++++++++++++++========================================================================= ] 10,445,121 543K/s 花時(shí) 14s 2013-06-30 16:53:45 (543 KB/s) - 已保存 “test.rar” [10445121/10445121]) 可以看到會(huì)從斷點(diǎn)的位置(%20)開(kāi)始下載。本文實(shí)例完整源碼可點(diǎn)擊此處本站下載。相信本文所述對(duì)大家的PHP程序設(shè)計(jì)有一定的借鑒價(jià)值。PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: av最新在线观看 | 欧美成在线视频 | 一级电影在线观看 | 国产成人小视频在线观看 | 在线日韩亚洲 | 91亚洲精品一区二区福利 | 亚洲午夜国产 | 99亚洲| 日韩精品久久久久久久电影99爱 | 免费观看又色又爽又黄的崩锅 | 亚洲国产高清一区 | 亚洲欧美国产视频 | 国产精品久久久久久久久久 | 666sao| 亚洲精品欧美二区三区中文字幕 | 国产一级在线免费观看 | 欧美一区黄色 | 黄色影院av | 亚洲一区二区三区高清视频 | 最近国产中文字幕 | 婷婷亚洲一区二区三区 | 成品片a免费直接观看 | 美女一级毛片 | 成人区一区二区三区 | 国产女厕所| 黄色片网站在线免费观看 | 亚洲一级电影在线观看 | 欧美aⅴ视频 | 久久91精品国产91久久yfo | 国产精品一区二区三区在线 | 羞羞视频免费视频欧美 | 久久久久国产成人免费精品免费 | 欧美视频在线观看一区 | 91av久久| 久久激情小视频 | 日日爱夜夜操 | 欧美成在线视频 | 在线成人www免费观看视频 | 亚洲精品7777| 国产无遮挡一级毛片 | 成年人在线视频观看 |