Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Защита файлов от скачивания по ссылкам с чужих сайтов на PHP
Очень неприятно, когда видишь, что трафик твоего сайта растет, а посетителей не прибавляется. И тут замечаешь, что "добрые люди" ставят ссылки на своих сайтах не на твою статью на твоем сайте, а непосредственное на твои файлы для скачивания. Вот от таких добрых людей и хочется сделать защиту. Она, конечно, не совершена, но от простых ссылок непорядочных людей, ворующих контент очень эффективна.
/*
Защита файлов от скачивания по ссылкам с чужих сайтов
ссылка на скачивание выглядит так:
http://example.com/antileech.php?down=4 <-- номер файла
или
http://example.com/antileech.php?down=filename <-- имя файла
*/
// Настройки
$antiurl = "htmlweb.ru"; // Разрешённый сайт (referer).
$antidir = $_SERVER['DOCUMENT_ROOT']."/download/"; // Папка где находятся защищённые от скачивания файлы
$logfile = "log.htm"; // Файл протокола (должен быть html или htm и обязательно CHMOD 777.
if (isset($logfile)) {
if (!file_exists($logfile)) die("Файл <font color='red'><b>$logfile</b></font> не найден!");
if (!is_writable($logfile)) die("Для файла <font color='red'><b>$logfile</b></font> нужно зделать CHMOD 777!");
if ($_SERVER['HTTP_REFERER'] == "")$cnr_data = "[не известно]";
else $cnr_data = "<a href=\"" . $_SERVER['HTTP_REFERER'] . "\">" . $_SERVER['HTTP_REFERER'] . "</a>";
$cnr_data = "<span style=\"color:green\">".$_SERVER['REMOTE_ADDR']."</span>
HOST <span style=\"color:red\">".gethostbyaddr($_SERVER['REMOTE_ADDR'])."</span>
visited on ".date("l d F H:i:s")." ссылка с ".$cnr_data."<br>";
@file_put_contents($_SERVER['DOCUMENT_ROOT'].$logfile, $cnr_data, FILE_APPEND);
}
// Проверка реферера
if (!stristr($_SERVER["HTTP_REFERER"], $antiurl) or !isset($_SERVER["HTTP_REFERER"]))
die('<h1>Файл по указанной ссылке не доступен!</h1>');
if (is_numeric($_GET["down"])){
// Здесь идут файлы для скачивания по номерам
if ($_GET["down"] == 1) $filename = "test1.rar";
elseif ($_GET["down"] == 2) $filename = "test2.rar";
elseif ($_GET["down"] == 3) $filename = "test3.rar";
}else $filename = $_GET["down"];
$path = $antidir . $filename; // Полная ссылка на файл
// Проверка файла есть он или нет
if (!file_exists($path)){
header("HTTP/1.0 404 Not Found");
die("Файл '$filename' не существует!");}
$ftime = date("D, d M Y H:i:s T", filemtime($path));
// Проверка
if (strstr($_SERVER["HTTP_REFERER"], $antiurl)) {
if (isset($_GET['down']) && isset($filename)) {
$fsize = filesize($path);
$ftime = date("D, d M Y H:i:s T", filemtime($path));
$fd = @fopen($path, "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($path));
fclose($fd);
if ($range) header("HTTP/1.1 206 Partial Content");
else header("HTTP/1.1 200 OK");
header("Content-Disposition: attachment; filename=" . basename($path));
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/octet-stream");
print $content;
exit;
} else die("Недействительный файл.");}
.
Прокомментировать/Отблагодарить