让PHP支持断点续传的源码_php教程-查字典教程网
让PHP支持断点续传的源码
让PHP支持断点续传的源码
发布时间:2016-12-29 来源:查字典编辑
摘要:比如第一次请求一个文件的从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教程学习
    编程开发子分类