Квартиры, дома, земельные участки Краснодарского края без посредников. Объявления собственников недвижимости.
Реклама здесь
Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Защита файлов от скачивания по ссылкам с чужих сайтов на PHP

Очень неприятно, когда замечаешь, что трафик твоего сайта растет, а посетителей не прибавляется. И тут замечаешь, что "добрые люди" ставят ссылки на своих сайтах не на твою статью на твоем сайте, а непосредственное на твои файлы для скачивания. Вот от таких добрых людей и хочется сделать защиту. Она конечно не совершенна, но от простых ссылок непорядочных людей, ворующих контент очень эфективна.


<?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 "<font color=\"green\">".$_SERVER['REMOTE_ADDR']."</font>
    HOST <font color=\"red\">"
.gethostbyaddr($_SERVER['REMOTE_ADDR'])."</font>
    visited on "
.date("l d F H:i:s")." ссылка с ".$cnr_data."<br>";
@
file_put_contents($_SERVER['DOCUMENT_ROOT'].$logfile$cnr_dataFILE_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($fdfilesize($path));
    
fclose($fd);
    if (
$rangeheader("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(
"Недействительный файл.");}
?>
Скопировать в буфер
Поставляем шаровые краны с пневмоприводом.
черный список строителей, результаты сотрудничества.

© Copyright 2008-2012 by KDG