[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Защита от прямых ссылок
savelikan
До недавного времени использовал скрипт для Защиты от прямых ссылок через PHP и использовал:
$fname=$_GET['fname'];
$fsize=filesize('secret_data/'.$fname);
$fdown='secret_data/'.$fname;

// Установлена или нет переменная HTTP_RANGE
if (getenv('HTTP_RANGE')=="") {
// Читать и отдавать файл от самого начала
$f=fopen($fdown, 'r');

header("HTTP/1.1 200 OK");
header("Connection: close");
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Content-Disposition: Attachment; filename=".$fname);
header("Content-Length: ".$fsize);

while (!feof($f)) {
if (connection_aborted()) {
fclose($f);
break;
}
echo fread($f, 10000);
sleep(1);
}
fclose($f);
}
else {
// Получить значение переменной HTTP_RANGE
preg_match ("/bytes=(\d+)-/", getenv('HTTP_RANGE'), $m);
$csize=$fsize-$m[1]; // Размер фрагмента
$p1=$fsize-$csize; // Позиция, с которой начинать чтение файла
$p2=$fsize-1; // Конец фрагмента

$f=fopen($fdown, 'r');

header("HTTP/1.1 206 Partial Content");
header("Connection: close");
header("Content-Type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Content-Disposition: Attachment; filename=".$fname);
header("Content-Range: bytes ".$p1."-".$p2."/".$fsize);
header("Content-Length: ".$csize);

fseek ($f, $p1);
while (!feof($f)) {
if (connection_aborted()) {
fclose($f);
break;
}
echo fread($f, 10000);
sleep(1);
}
fclose($f);
}

ну и еще некоторые проверки. Я так понимаю, перед тем, как передать файл он грузится в оперативную память... А если файл 200МБ? Огромная нагрузка на сервер....
Подскажите пожалуйста, есть ли другие способа защитить файлы от прямых ссылок?



Спустя 2 часа, 47 минут, 9 секунд (29.09.2011 - 21:10) Лена написал(а):
Я когда-то писала скрипт - Скачивание файла
Посмотрите, будет интересно. Там в теме смотрите последний пост, хотя и в нем могут быть ошибки.
Можно маскировать ссылки с помощью механизма mod_rewrite.

Спустя 5 минут, 44 секунды (29.09.2011 - 21:16) Nikitian написал(а):
savelikan
В вашем скрипте файл не грузится в память,т.к. не используется буферизация вывода на уровне пхп. Если вас этот в ариант не устраивает, то можете использовать внутренние редиректы проксирующего сервера, если он у вас есть.

Спустя 10 минут, 56 секунд (29.09.2011 - 21:27) savelikan написал(а):
Спасибо


_____________
Одесса - мой город!)))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.