【发布时间】: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