background image

//Begin writing headers 

header("Cache-Control:"); 
header("Cache-Control: public"); 

//

 

设置输出浏览器格式

header("Content-Type: $ctype"); 
header("Content-Disposition: attachment; filename=" . 

$outFile

); 

header("Accept-Ranges: bytes"); 

$size

 = 

filesize

(

$sourceFile

); 

//如果有$_SERVER['HTTP_RANGE']

 

参数

if

 (isset (

$_SERVER

['HTTP_RANGE'])) { 

/*Range

 

头域 Range

 

头域可以请求实体的一个或者多个子范围。

 

例如,
表示头 500 个字节:bytes=0-499 
表示第二个 500 字节:bytes=500-999 
表示最后 500 个字节:bytes=-500 
表示 500 字节以后的范围:bytes=500- 
第一个和最后一个字节:bytes=0-0,-1 
同时指定几个范围:bytes=500-600,601-999 
但是服务器可以忽略此请求头,如果无条件 GET 包含 Range 请求头,响应会以状态码
206(PartialContent)返回而不是以 200 (OK

 

)。

*/

 

// 

 

断点后再次连接 $_SERVER['HTTP_RANGE'] 

 

的值 bytes=4390912- 

list (

$a

$range

) = 

explode

("=", 

$_SERVER

['HTTP_RANGE']); 

//if yes, download missing part 

str_replace

(

$range

, "-", 

$range

); 

//

 

这句干什么的呢。。。。

$size2

 = 

$size

 -1; 

//

 

文件总字节数

$new_length

 = 

$size2

 - 

$range

//

 

获取下次下载的长度

header("HTTP/1.1 206 Partial Content"); 
header("Content-Length: $new_length"); 

//

 

输入总长

header("Content-Range: bytes $range$size2/$size"); 

//Content-Range: bytes 4908618-

4988927/4988928 95%

 

的时候

else

 { 

//

 

第一次连接

$size2

 = 

$size

 -1; 

header("Content-Range: bytes 0-$size2/$size"); 

//Content-Range: bytes 0-4988927/4988928 

header("Content-Length: " . 

$size

); 

//

 

输出总长

//

 

打开文件

$fp

 = 

fopen

("$sourceFile", "rb"); 

//

 

设置指针位置

fseek

(

$fp

$range

);