手机
当前位置:查字典教程网 >编程开发 >php教程 >让PHP支持断点续传的源码
让PHP支持断点续传的源码
摘要:比如第一次请求一个文件的从0到999字节,第二次请求1000到1999字节,以此类推,每次请求1000字节的内容,然后程序通过fseek函数...

比如第一次请求一个文件的从0到999字节,第二次请求1000到1999字节,以此类推,每次请求1000字节的内容,然后程序通过fseek函数去取得对应的文件位置,然后输出。

复制代码 代码如下:

$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文件是如何实现断点续传的。请看代码:

也是通过$_SERVER['HTTP_RANGE']取得用户请求的文件的range,具体的大家可以查看其源码分析下。这里我就当抛砖引玉了。

复制代码 代码如下:

$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支持断点续传的源码】相关文章:

支持中文的PHP按字符串长度分割成数组代码

PHP自动生成月历代码

PHP截取中文字符串的问题

php支持中文字符串分割的函数

PHP基于MySQL数据库实现对象持久层的方法

使用PHP维护文件系统

使用PHP制作新闻系统的思路

php按单词截取字符串的方法

我的论坛源代码(一)

我的论坛源代码(五)

精品推荐
分类导航