通过Apache和PHP virtual()函数发送文件,支持HTTP_RANGE

时间:2011-02-04 13:16:15

标签: php apache apache2 resume-download

我正在使用PHP函数virtual()通过Apache 2.2发送文件(它的工作速度比readfile()快),我可以检查用户访问权限。

但有没有办法用HTTP_RANGE添加连续下载支持?

我尝试过这样的事情

if(isset($_SERVER['HTTP_RANGE'])) { 
        list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']); 
        str_replace($range, "-", $range); 
        $size2=$size-1; 
        $new_length=$size-$range; 
        header("HTTP/1.1 206 Partial Content"); 
        header("Content-Length: $new_length"); 
        header("Content-Range: bytes $range$size2/$size"); 
        apache_setenv('HTTP_RANGE', $_SERVER['HTTP_RANGE']);
    } else { 
        $size2=$size-1; 
        header("Content-Range: bytes 0-$size2/$size"); 
        header("Content-Length: ".$size); 
} 

所以web-client是下载文件,如果HTTP_RANGE工作,但在实际的Apache中只发送相同的文件范围,如:如果客户端询问4000-6000字节,Apache发送0-2000等,所以文件被破坏。

我认为有一些方法可以使用apache_setenv进行,但无法在Google中找到任何关于此的建议。

1 个答案:

答案 0 :(得分:3)

尝试将xfilesend模块用于Apache。