通过 Apache 和 PHP virtual() 函数发送文件并支持 HTTP_RANGE
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试使用 Apache 的 xfilesend 模块。
Try to use xfilesend module for Apache.