dak
Guest
Download с поддержкой докачки
Имеется скриптик для закачки файла с поддержкой докачки. Если в одни поток и не прерывая то все ок:
А если пытаться "Качалками" пользоваться, то или клиент показывает, что докачки нет, или закачивает с ошибками. Точно понять что работает что нет не получается, у пользователей очень разные сообщения по этому поводу. Вот код, вроде не большой, не глянет кто-нибудь, или не порекомендует где еще можно про это глянуть:
Может чего в заголовке забыл послать?
Имеется скриптик для закачки файла с поддержкой докачки. Если в одни поток и не прерывая то все ок:
А если пытаться "Качалками" пользоваться, то или клиент показывает, что докачки нет, или закачивает с ошибками. Точно понять что работает что нет не получается, у пользователей очень разные сообщения по этому поводу. Вот код, вроде не большой, не глянет кто-нибудь, или не порекомендует где еще можно про это глянуть:
PHP:
function Download($file,$name){
if (!file_exists($file))
{
header ("HTTP/1.0 404 Not Found");
exit;
}
$fsize = filesize($file);
$ftime = date("D, d M Y H:i:s T", filemtime($file));
$fd = @fopen($file, "rb");
if (!$fd){
header ("HTTP/1.0 403 Forbidden");
exit;
}
// Если запрашивающий агент поддерживает докачку
if ($HTTP_SERVER_VARS["HTTP_RANGE"]) {
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {fseek($fd, $range);}
}
$content = fread($fd, filesize($file));
fclose($fd);
if ($range) {
header("HTTP/1.1 206 Partial Content");
}
else {
header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename=".$name);
header("Last-Modified: $ftime");
header("Accept-Ranges: bytes");
header("Content-Length: ".($fsize-$range));
header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);
header("Content-Type: application/downloads");
print $content;
};