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

发布于 2024-10-16 01:08:18 字数 1041 浏览 7 评论 0原文

我正在使用 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 客户端会像 HTTP_RANGE 工作一样下载文件,但实际上 Apache 总是发送相同的文件范围,例如:如果客户端请求 4000-6000 字节,Apache 会发送 0-2000 等,因此文件被破坏。

我认为有某种方法可以使用 apache_setenv 来做到这一点,但在 Google 中找不到任何相关建议。

I'm using PHP function virtual() for sending files by Apache 2.2 (it works faster than readfile()) and I can check user access permissions.

But is there any way to add continuous download support, with HTTP_RANGE?

I have tried things like this

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); 
} 

So web-client was downloaded files like if HTTP_RANGE works, but in real Apache just sends always the same file-ranges like: if client ask 4000-6000 bytes, Apache sends 0-2000 and etc, so files was broken.

I think that there is some way to do it using apache_setenv, but can't find in Google any suggestion about that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

橙味迷妹 2024-10-23 01:08:18

尝试使用 Apache 的 xfilesend 模块。

Try to use xfilesend module for Apache.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文