Home >Backend Development >PHP Tutorial >Breakpoint resume download source code for PHP to support breakpoint resume download

Breakpoint resume download source code for PHP to support breakpoint resume download

WBOY
WBOYOriginal
2016-07-29 08:42:451208browse

For example, the first request for a file ranges from 0 to 999 bytes, the second request is for 1000 to 1999 bytes, and so on. Each time it requests 1000 bytes of content, the program then obtains the corresponding file location through the fseek function. Then output.

Copy the code The code is as follows:


$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);


You can also take a look at how the attachment.php file of the Discuz! forum software implements breakpoint resumption of. Please look at the code:
The range of the file requested by the user is also obtained through $_SERVER['HTTP_RANGE']. For details, you can view its source code analysis. Here I'm just going to start a discussion.

Copy code The code is as follows:


$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));
}
}

The above introduces the source code for PHP to support breakpoint resume transfer, including the content of breakpoint resume download. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn