讓PHP支持?jǐn)帱c(diǎn)續(xù)傳的源碼
更新時(shí)間:2010年05月16日 21:36:50 作者:
其實(shí)說(shuō)簡(jiǎn)單點(diǎn)就是通過(guò)這個(gè)變量$_SERVER['HTTP_RANGE']取得用戶(hù)請(qǐng)求的文件的range,然后程序去控制文件的輸出。
比如第一次請(qǐng)求一個(gè)文件的從0到999字節(jié),第二次請(qǐng)求1000到1999字節(jié),以此類(lèi)推,每次請(qǐng)求1000字節(jié)的內(nèi)容,然后程序通過(guò)fseek函數(shù)去取得對(duì)應(yīng)的文件位置,然后輸出。
$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文件是如何實(shí)現(xiàn)斷點(diǎn)續(xù)傳的。請(qǐng)看代碼:
也是通過(guò)$_SERVER['HTTP_RANGE']取得用戶(hù)請(qǐng)求的文件的range,具體的大家可以查看其源碼分析下。這里我就當(dāng)拋磚引玉了。
$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));
}
}
復(fù)制代碼 代碼如下:
$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文件是如何實(shí)現(xiàn)斷點(diǎn)續(xù)傳的。請(qǐng)看代碼:
也是通過(guò)$_SERVER['HTTP_RANGE']取得用戶(hù)請(qǐng)求的文件的range,具體的大家可以查看其源碼分析下。這里我就當(dāng)拋磚引玉了。
復(fù)制代碼 代碼如下:
$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超大文件下載,斷點(diǎn)續(xù)傳下載的方法詳解
- php實(shí)現(xiàn)的支持?jǐn)帱c(diǎn)續(xù)傳的文件下載類(lèi)
- php下載遠(yuǎn)程文件類(lèi)(支持?jǐn)帱c(diǎn)續(xù)傳)
- php斷點(diǎn)續(xù)傳之如何分割合并文件
- PHP實(shí)現(xiàn)文件下載斷點(diǎn)續(xù)傳詳解
- PHP實(shí)現(xiàn)HTTP斷點(diǎn)續(xù)傳的方法
- PHP使用range協(xié)議實(shí)現(xiàn)輸出文件斷點(diǎn)續(xù)傳代碼實(shí)例
- php支持?jǐn)帱c(diǎn)續(xù)傳、分塊下載的類(lèi)
- 前端js實(shí)現(xiàn)文件的斷點(diǎn)續(xù)傳 后端PHP文件接收
- php斷點(diǎn)續(xù)傳之文件分割合并詳解
相關(guān)文章
使用XDebug調(diào)試及單元測(cè)試覆蓋率分析
那天校長(zhǎng)分析了關(guān)于數(shù)據(jù)庫(kù)的分析及優(yōu)化的一些方法,很好用,也體會(huì)性能作為應(yīng)用程序的重要指標(biāo),需要我們重視。2011-01-01
PHP通過(guò)內(nèi)置函數(shù)memory_get_usage()獲取內(nèi)存使用情況
這篇文章主要介紹了PHP通過(guò)內(nèi)置函數(shù)memory_get_usage()獲取內(nèi)存使用情況,需要的朋友可以參考下2014-11-11
php創(chuàng)建類(lèi)并調(diào)用的實(shí)例方法
在本篇文章里小編給大家分享的是關(guān)于php如何創(chuàng)建類(lèi)并調(diào)用的相關(guān)知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。2019-09-09
PHP簡(jiǎn)單實(shí)現(xiàn)循環(huán)鏈表功能示例
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)循環(huán)鏈表功能,簡(jiǎn)單描述了循環(huán)鏈表的概念、功能并結(jié)合實(shí)例形式分析了php定義及使用循環(huán)鏈表的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
php強(qiáng)大的時(shí)間轉(zhuǎn)換函數(shù)strtotime
在php中strtotime() 函數(shù)將任何英文文本的日期時(shí)間描述解析為 Unix 時(shí)間戳,這個(gè)函數(shù)也是我們經(jīng)常會(huì)用到的,有需要的朋友參考一下2016-02-02
PHP基于rabbitmq操作類(lèi)的生產(chǎn)者和消費(fèi)者功能示例
這篇文章主要介紹了PHP基于rabbitmq操作類(lèi)的生產(chǎn)者和消費(fèi)者功能,結(jié)合實(shí)例形式分析了基于rabbitmq操作類(lèi)的生產(chǎn)者和消費(fèi)者定義與使用方法,需要的朋友可以參考下2018-06-06

