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 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 How does the attachment.php file of Discuz! forum software implement breakpoint resumption. Please look at the code:
also obtains the range of files requested by the user through $_SERVER['HTTP_RANGE']. For details, you can view its source code analysis. Here I am just trying to attract some new ideas.
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));
}
}
http://www.bkjia.com/PHPjc/321919.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/321919.htmlTechArticleFor example, the first request for a file is from 0 to 999 bytes, and the second request is from 1000 to 1999 bytes. , and so on, requesting 1000 bytes of content each time, and then the program uses the fseek function to obtain the corresponding...