|
|
|
|
|
для: -=|NickK|=-
(13.06.2007 в 15:57)
| | очепятка - да.
Но не в ней суть.
Касательно blklen/buflen - тут всё чисто.
blklen - размер блока чтения.
buflen - размер прочтенного участка файла. | |
|
|
|
|
автор: -=|NickK|=- (13.06.2007 в 15:59) |
|
|
для: Trianon
(21.05.2007 в 14:43)
| | Чет туплю... Не дочитал до конца... | |
|
|
|
|
автор: -=|NickK|=- (13.06.2007 в 15:57) |
|
|
для: Trianon
(21.05.2007 в 14:43)
| | Да, и еще чередование blklen / buflen ) | |
|
|
|
|
автор: -=|NickK|=- (13.06.2007 в 15:50) |
|
|
для: Trianon
(21.05.2007 в 14:43)
| | На первый взгляд:
- Не совпадают имена переменных с именем файла
- очепятка: if($arnge[1] == $size) | |
|
|
|
|
|
|
|
для: kasmanaft
(12.06.2007 в 19:21)
| | "Гипертекстный протокол HTTP" и RFC-2616 это одно и то же?
Просто я думал что это разные вещи....
Если нет, тогда спасибо... два раза... :)
Седня целый день его читаю.... :) Голова уже квадратная... :) | |
|
|
|
|
|
|
|
для: tAleks
(12.06.2007 в 19:12)
| | > Дайте пожалуйста ссылку на перевод.
Вам ее уже не раз давали...
Есть и в этой теме, ~10 постов наверх.
("Гипертекстный протокол HTTP") | |
|
|
|
|
|
|
|
для: Trianon
(12.06.2007 в 15:22)
| | >Пример расчитан на человека
> а) прочитавшего разделы 9.2.7, 13.5, 13.36 документа RFC-2616 или его перевода, и
Дайте пожалуйста ссылку на перевод.
> б) представляющего, что делают функции explode, ftell, fpassthru.
Знаю, только то, что написано о них в мануале.
>Кстати, пример, похоже, содержит ошибку.
>Ненамеренно, конечно, так получилось.
>В ближайшее время попытаюсь её исправить.
Жду. Надо позарез... | |
|
|
|
|
|
|
|
для: tAleks
(12.06.2007 в 10:40)
| | Пример расчитан на человека а) прочитавшего разделы 9.2.7, 13.5, 13.36 документа RFC-2616 или его перевода, и б) представляющего, что делают функции explode, ftell, fpassthru.
Кстати, пример, похоже, содержит ошибку.
Ненамеренно, конечно, так получилось.
В ближайшее время попытаюсь её исправить. | |
|
|
|
|
|
|
|
для: Trianon
(21.05.2007 в 14:43)
| | Trianon, не сочтите за труд, пожалуйста, прокоментируйте ваш пример, как для новичков. | |
|
|
|
|
|
|
|
для: Aid
(21.05.2007 в 13:47)
| | Честно скажу, написано только что, и на одном дыхании, так что корректность не проверял.
Но то, что вспомнил - учел.
<?php
$handle = fopen($fullname, 'rb');
fseek($handle, 0, SEEK_END);
$size = ftell($handle);
if(isset($_SERVER['HTTP_RANGE']))
{
$range = explode('-', $_SERVER['HTTP_RANGE']);
if(!$range[0])$range[0] = 0;
if($range[1]) ++ $range[1];
else $range[1] = $size;
}
else $range = array(0, $size);
if($range[0] < 0) $range[0] = 0;
if($range[1] > $size) $range[1] = $size;
$part_size = $range[1]-$range[0];
$range_start = $range[1];
if($range[0] > 0 || $range[1] < $size)
{
$range_stop = $range[1]-1;
header("206 HTTP/1.0 Partial content");
header("Content-Length: $part_size");
header("Content-Range: bytes $range_start-$range_stop/$size");
}else
header("Content-Length: $size");
header("Accept-Ranges: bytes");
header("Content-Type: application/octet-stream; name=\"$name\"");
header("Content-Disposition: attachment; filename=\"$name\"");
fseek($handle, $range_start, SEEK_SET);
if($arnge[1] == $size)
fpassthru($handle);
else
for($blklen = 16384, $pos = $range_start; $pos < $range[1]; $pos += $buflen)
{
if($range[1]-$pos < $blklen)
$blklen = intval($range[1]-$pos);
$buffer = fread($handle, $blklen);
$buflen = strlen($buffer);
echo $buffer;
}
?>
|
| |
|
|
|
|