[php] докачка файла

vlfdimir58

Отдаю файл вот так через скрипт:

Header("Content-Length: ".filesize($filename;
Header("Content-Type: application/x-download");
Header("Content-Disposition: attachment; filename=\"".$rez[9]."\"");
readfile($filename);
die;


$rez[9] - это имя файла. $filename - путь к файлу.
Проблема такая. Я через этот скрипт отдаю относительно большие файлы. Те, кто сидят на модеме долго ждут. И если случается обрыв, то закачивать приходится все сначала.
Как реализовать возможность докачки файла?
Это вообще возможно?

Marinavo_0507

Range надо обрабатывать...

vlfdimir58

это что такое?

vlfdimir58

я ща сам поищу, не надо RTFM

stm7884696

И каким образом range поможет ?
это же ранговая сортировка массивов!

vlfdimir58

HTTP_RANGE
PEAR::HTTP_Download

tokuchu

Твой, может, и не поможет, а тот, про который говорилось...

stm7884696

все равно не понял, что к чему...
Правда и не вчитывался особо..
Кто разботает, если не в падлу, выложите код, для решения обсуждаемой проблемы....

tokuchu

Протокол HTTP позволяет клиенту указать какую часть ответа сервера он хочет получить.

vlfdimir58

http://www.rsdn.ru/Forum/Message/888777.htm
вот в общем. Рабочий пример. Только что проверил.

stm7884696

и че то не заходит....
даже на сервак.....

vlfdimir58



if (!file_exists($file_name
{
header("HTTP/1.0 404 Not Found");
exit;
}
$file_size = filesize($file_name);
$file_time = date("D, d M Y H:i:s T", filemtime($file_name;
$file_handle = fopen($file_name, "rb");
if (!$file_handle)
{
header("HTTP/1.0 403 Forbidden");
exit;
}
$file_range = array("from" => 0, "to" => $file_size);
if (array_key_exists("HTTP_RANGE", $_SERVER
{
if (preg_match("/bytes=(\d+)-(\d*)/", $_SERVER["HTTP_RANGE"], $matches
{
$file_range = array("from" => $matches[1], "to" => ($matches[2] == "") ? $file_size : $matches[2]);
if ($file_range)
{
fseek($file_handle, $file_range["from"]);
}
}
}
$file_data = fread($file_handle, $file_range["to"] - $file_range["from"] + 1);
fclose($file_handle);
if ($file_range["from"] != 0)
{
header("HTTP/1.0 206 Partial Content");
}
else
{
header("HTTP/1.0 200 OK");
}
header("Content-Type: application/octet-stream");
header("Content-Length: ".($file_range["to"] - $file_range["from"] + 1;
header("Content-Disposition: attachment; filename=".$file_name);
header("Content-Range: bytes ".$file_range["from"]."-".$file_range["to"]."/".$file_size);
header("Last-Modified: ".$file_time);
header("ETag: \"".md5($file_name.$file_size.$file_time)."\"");
header("Accept-Ranges: bytes");
print $file_data;
exit;

stm7884696

спасибо..
Оставить комментарий
Имя или ник:
Комментарий: