如何讓PHP支持?jǐn)帱c(diǎn)續(xù)傳文件_PHP教程
推薦:PHP判斷搜索引擎機(jī)器人Robot有朋友問到如何使用PHP去判斷是否是搜索引擎,其實(shí)PHP有個(gè)很簡(jiǎn)單的方式去實(shí)現(xiàn),通過_SERVER這個(gè)預(yù)定義變量中的_SERVER['HTTP_USER_AGENT']可以取得訪問者的屬性,具體可以看下Diiscuz!是如何判斷搜索引擎的,函數(shù)代碼如下: function getrobot() { if(!defin
現(xiàn)在的很多服務(wù)器都支持?jǐn)帱c(diǎn)續(xù)傳去下載軟件,同時(shí)很多下載軟件也是斷點(diǎn)續(xù)傳,怎么樣才能讓PHP也能實(shí)現(xiàn)斷電續(xù)傳功能呢?請(qǐ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);
其實(shí)說(shuō)簡(jiǎn)單點(diǎn)就是通過這個(gè)變量_SERVER['HTTP_RANGE']取得用戶請(qǐng)求的文件的range,然后程序去控制文件的輸出。比如第一次請(qǐng)求一個(gè)文件的從0到999字節(jié),第二次請(qǐng)求1000到1999字節(jié),以此類推,每次請(qǐng)求1000字節(jié)的內(nèi)容,然后程序通過fseek函數(shù)去取得對(duì)應(yīng)的文件位置,然后輸出。
大家也可以看下Discuz!論壇軟件的attachment.php文件是如何實(shí)現(xiàn)斷點(diǎn)續(xù)傳的。請(qǐng)看代碼:
range = 0;
if(readmod == 4) {
dheader('Accept-Ranges: bytes');
if(!empty(_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));
}
}
也是通過_SERVER['HTTP_RANGE']取得用戶請(qǐng)求的文件的range,具體的大家可以查看其源碼分析下。這里我就當(dāng)拋磚引玉了。
分享:PHP的print函數(shù)PHP的print函數(shù),姑且說(shuō)是函數(shù)吧
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- php gzip壓縮輸出的實(shí)現(xiàn)方法
- Linux操作系統(tǒng)啟動(dòng)httpd失敗的解決方法
- 解析php DOMElement 操作xml 文檔的實(shí)現(xiàn)代碼
- 淺談PHP數(shù)組讀取的循環(huán)操作
- 淺談基于UML的城軌列車超速防護(hù)系統(tǒng)建模
- PHP實(shí)例:常用的數(shù)值判斷函數(shù)
- 如何利用PHP操縱Oracle LOB類型數(shù)據(jù)
- 淺談PHP 編碼規(guī)范-注釋
- 基于php socket(fsockopen)的應(yīng)用實(shí)例分析
- 關(guān)于php 接口問題(php接口主要也就是運(yùn)用curl,curl函數(shù))
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-如何讓PHP支持?jǐn)帱c(diǎn)續(xù)傳文件
。