欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

php range header

賈玉琴1年前6瀏覽0評論

PHP中的range header通常用于請求指定范圍內的文件內容,這一功能在Internet上的文件下載和視頻播放等方面得到了廣泛的應用。

以下載文件為例,假設我們有一個10MB的文件需要下載,如果用戶每次下載都要下載整個文件,那么不僅會浪費大量的帶寬和時間,而且還會給服務器帶來較大的負擔。此時,我們可以使用range header來實現文件的斷點續傳。

if(isset($_SERVER['HTTP_RANGE'])){
$range = $_SERVER['HTTP_RANGE'];
$file = 'example.mp4';
$size = filesize($file);
$start = 0;
$end = $size - 1;
header('Content-type: video/mp4');
header('Accept-Ranges: bytes');
list(, $range) = explode('=', $range);
if(strpos($range, ',')!==false){
header('HTTP/1.1 416 Requested Range Not Satisfiable');
header("Content-Range: bytes $start-$end/$size");
exit;
}
if($range == '-'){
$cstart = $size - substr($range, 1);
}else{
$range = explode('-', $range);
$cstart = $range[0];
$cend = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size - 1;
}
$cend = ($cend > $end) ? $end : $cend;
if($cstart > $cend || $cstart > $size - 1 || $cend >= $size){
header('HTTP/1.1 416 Requested Range Not Satisfiable');
header("Content-Range: bytes $start-$end/$size");
exit;
}
$start = $cstart;
$end = $cend;
$length = $end - $start + 1;
header('HTTP/1.1 206 Partial Content');
header("Content-Range: bytes $start-$end/$size");
header("Content-Length: ".$length);
$fp = fopen($file, 'rb');
fseek($fp, $start);
while(!feof($fp) && ($p = ftell($fp)) <= $end){
if($p + 1024 > $end){
$data = fread($fp, $end - $p + 1);
}else{
$data = fread($fp, 1024);
}
echo $data;
}
fclose($fp);
}else{
header('Content-type: video/mp4');
header('Accept-Ranges: bytes');
header('Content-Length: '.filesize('example.mp4'));
readfile('example.mp4');
}

上述代碼中,首先判斷是否存在range header信息,如果存在,則進行文件的分塊讀取,然后輸出到客戶端。如果不存在,則直接輸出文件內容到客戶端。其中,HTTP/1.1 206 Partial Content表示部分內容,HTTP/1.1 416 Requested Range Not Satisfiable表示所請求的range header不合法。

總的來說,PHP中的range header功能十分實用,可以有效降低服務器和客戶端的帶寬和時間消耗,提高用戶體驗。在實際開發中,我們需要根據具體需求來靈活運用range header功能,以達到更好的效果。