sega_omm
ЯЯЯЯЯЯЯЯЯЯ
Задача:
будет большой список файлов для скачивания, необходимо, чтобы прямые ссылки на файлы были скрыты и только человек, зашедший на сайт, мог скачать файл, и при этом ссылка бы на него умирала через сутки,
вообщем, чтобы ссылки на файлы не гуляли по интернету.
Умею работать с БД sql, в принципе представляю только как сделать убийство ссылок(заносим id файла в базу, еще какой-нить указатель, дату начала и через скрипт потом удаляем все записи, время с создания которых больше 24 часов.)
Но я не умею работать с файлами толком. Нарыл такой код с softtime.ru
Можете его прокомментировать? где тут что...
Надеюсь, поможете!
будет большой список файлов для скачивания, необходимо, чтобы прямые ссылки на файлы были скрыты и только человек, зашедший на сайт, мог скачать файл, и при этом ссылка бы на него умирала через сутки,
вообщем, чтобы ссылки на файлы не гуляли по интернету.
Умею работать с БД sql, в принципе представляю только как сделать убийство ссылок(заносим id файла в базу, еще какой-нить указатель, дату начала и через скрипт потом удаляем все записи, время с создания которых больше 24 часов.)
Но я не умею работать с файлами толком. Нарыл такой код с softtime.ru
Код:
<?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;
}
?>
Можете его прокомментировать? где тут что...
Надеюсь, поможете!