【问题标题】:Sending files by Apache and PHP virtual() function with HTTP_RANGE support通过支持 HTTP_RANGE 的 Apache 和 PHP virtual() 函数发送文件
【发布时间】:2011-06-21 08:49:21
【问题描述】:

我正在使用 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 中找不到任何建议。

【问题讨论】:

  • 您是否也可以发布在服务器和客户端的事务期间发送的实际 HTTP 标头。

标签: php apache apache2 resume-download


【解决方案1】:

尝试使用 Apache 的 xfilesend 模块。

【讨论】:

    猜你喜欢
    • 2019-01-30
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多