讓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)文章
php獲取網(wǎng)頁(yè)內(nèi)容方法總結(jié)
用php抓取頁(yè)面的內(nèi)容在實(shí)際的開(kāi)發(fā)當(dāng)中是非常有用的,如作一個(gè)簡(jiǎn)單的內(nèi)容采集器,提取網(wǎng)頁(yè)中的部分內(nèi)容等等2008-12-12總結(jié)PHP刪除字符串最后一個(gè)字符的三種方法
這篇文章為大家講解的是php實(shí)現(xiàn)如何去掉字符串的最后一個(gè)字符的多種方法,感興趣的同學(xué)參考下。下面來(lái)一起看看。2016-08-08php將HTML表格每行每列轉(zhuǎn)為數(shù)組實(shí)現(xiàn)采集表格數(shù)據(jù)的方法
這篇文章主要介紹了php將HTML表格每行每列轉(zhuǎn)為數(shù)組實(shí)現(xiàn)采集表格數(shù)據(jù)的方法,涉及php正則替換的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04PHP自動(dòng)識(shí)別字符集并完成轉(zhuǎn)碼詳解
話(huà)不多說(shuō),直接上函數(shù),這個(gè)函數(shù)是用來(lái)對(duì)字符串進(jìn)行檢查和轉(zhuǎn)碼的。需要的朋友可以過(guò)來(lái)參考下2013-08-08php 對(duì)輸入信息的進(jìn)行安全過(guò)濾的函數(shù)代碼
php 對(duì)輸入信息的過(guò)濾代碼,主要是針對(duì)php安全問(wèn)題2012-06-06PHP實(shí)現(xiàn)的下載遠(yuǎn)程圖片自定義函數(shù)分享
這篇文章主要介紹了PHP實(shí)現(xiàn)的下載遠(yuǎn)程圖片自定義函數(shù)分享,本文直接給出實(shí)現(xiàn)代碼和,本文直接給出實(shí)現(xiàn)代碼和使用方法,需要的朋友可以參考下2015-01-01php中數(shù)字、字符與對(duì)象判斷函數(shù)用法實(shí)例
這篇文章主要介紹了php中數(shù)字、字符與對(duì)象判斷函數(shù)用法,以實(shí)例形式分析了is_bool()、is_int()、is_integer()、is_float()、is_real()、is_object() 和 is_array()等函數(shù)的作用及具體用法,需要的朋友可以參考下2014-11-11