Защита изображений на всем сайте. PHP+mod_rewrite

Автор: Беляев Александр
Сайт Автора: wm-help.net
E-mail Автора: [email protected]
Дата написания: 09.11.2006
    На многих популярных сайтах с уникальным контентом, нередко можно увидеть, что почти на всех изображениях стоит либо картинка-логотип, либо подпись с названием сайта. Делается это для того, что бы хоть как то защитить сайт от недобросовестных веб-мастеров, забывающих указывать первоисточник материала. Очень актуален такой вид защиты для сайтов с уникальными галереями всевозможных картинок и изображений. Конечно, скажете вы, можно просто обрезать или замазать то место, где стоит подпись или логотип, но это все равно лучше, чем вообще не пытаться защитить свои изображения от посягательств со стороны конкурентов.

    Для реализации защиты изображений на всем сайте нужно будет использовать mod_rewrite + PHP. Идея данной защиты очень проста: mod_rewrite перенаправляет все запросы идущие к папке image, а php-скрипт, в зависимости от типа запрашиваемого файла, решает, что с ним делать – накладывать копирайт, если это изображение или не стоит, если это файл. Единственным минусом данного подхода является то, что все защищаемые изображения нужно хранить в отдельной папке, что бы mod_rewrite мог определить, нужно или нет защищать данное изображение. Если же вы вдруг захотите "пометить" все изображения на сайте, то приготовьтесь к тому, что от вашего графического дизайна, ничего на останется – все будет усеяно вашими копирайтами.

    И так, реализация данной защиты изображений на сайте проста, так же как и сама идея. Для начала дописываем в .htaccess пару строчек:
RewriteEngine on
RewriteBase /
Options +FollowSymlinks

RewriteRule ^image/(.*) image.protect.php?img_name=$1

    После добавления этих строчек в .htaccess все запросы идущие к папке image будут автоматически перенаправляться на php-скрипт, в переменной $img_name с указанием оставшейся части пути к файлу.


    PHP-скрипт тоже не слишком сложен для понимания, в нем реализованы функции защиты для основных типов изображений, который в основном используются в интернете:
<?php
/* https://wm-help.net/ */
/* Функция для наложения на изображение своего копирайта в виде текста */
/* для использования других шрифтов используйте imageloadfont() */
function img_nalogenie(&$im, $img_info)
{
    if ($img_info[0]>50 and $img_info[1]>20) /* проверка, влезит ли надпись */
    {
    $green = imagecolorallocate ($im, 0, 255, 0); // установка зеленого цвета
    imagestring($im, /* наше изображение */
                  2, /* id шрифта (0-5 - системные), остальные грузятся через imageloadfont() */
                  5, /* смещение по X */
                  5, /* смещение по Y */
                  "(c) wm-help.net", /* защитная надпись на изображении */
                  $green); /* цвет выводимого текста */
    }
}
 
if (isset($img_name))
{
    $img_name = "image/" . $img_name; /* дополнение пути */
    $info = @getimagesize($img_name); /* получение информации о изображении */
    $ext = @$info[2]; /* тип изображения */
    $header = @$info['mime']; /* правильный заголовок для использования в header() */
 
    switch($ext) /* выбор способа открытия по типу изображения */
    {
        case 1: // GIF
        {
            $im = @imagecreatefromgif($img_name); /* попытка открыть */
            if ($im) /* Открылось или нет */
            {
                header("Content-type: " . $header); /* отправляем заголовок */
                img_nalogenie($im, $info); /* накладываем свой текст на изображение */
                imagegif($im); /* выводим изображение в браузер */
            }
        break;
        }
 
        case 2: // JPG
        {
            $im = @imagecreatefromjpeg($img_name);
            if ($im)
            {
                header("Content-type: " . $header);
                img_nalogenie($im, $info);
                imagejpeg($im);
            }
        break;
        }
 
        case 3: // PNG
        {
            $im = @imagecreatefrompng($img_name);
            if ($im)
            {
                header("Content-type: " . $header);
                img_nalogenie($im, $info);
                imagepng($im);
            }
        break;
        }
 
        case 6: // BMP
        {
            $im = @imagecreatefromwbmp($img_name);
            if ($im)
            {
                header("Content-type: " . $header);
                img_nalogenie($im, $info);
                imagewbmp($im);
            }
        break;
        }
        default: /* если ничего не подошло */
        {
            $f = @file($img_name); /* пробуем считать файл */
            if ($f) /* если файл считался */
            {
            echo implode("", $f); /* выводим массив строкой */
            }
        break;
        }
    }
}
?>

    Ну а для тех, у кого по какой-то причине данная защита изображений на всем сайте не работает, советую проверить: установлен ли на вашем хостинге mod_rewrite; правильно ли указанна директория с изображениями, в данном примере это – images; все ли вы правильно сделали.
    Скачать данный пример защиты изображений от плагиата можно здесь: https://wm-help.net/download/image.protect.zip.
Источник: https://wm-help.net/my-articles/article/image-protect-on-all-site.PHP-plus-mod_rewrite.htmPage copy protected against web site content infringement by Copyscape
Перепечатка данной статьи разрешается только при письменном(e-mail) разрешении автора (Беляева Александра Дмитриевича) и при полном сохранении исходного вида статьи (ссылки, авторские реферальные ссылки, e-mail'ы, форматирование текста, ...), а так же указания точных данных об авторстве (данные автора + прямая [без редиректа и не закрытая от индексации] ссылка на статью).
В случае не выполнения данных правил, возможно применение «особых» мер, к нарушителям.