Защита изображений на всем сайте. PHP+mod_rewrite
На многих популярных сайтах с уникальным контентом, нередко можно увидеть, что почти на всех изображениях стоит либо картинка-логотип, либо подпись с названием сайта. Делается это для того, что бы хоть как то защитить сайт от недобросовестных веб-мастеров, забывающих указывать первоисточник материала. Очень актуален такой вид защиты для сайтов с уникальными галереями всевозможных картинок и изображений. Конечно, скажете вы, можно просто обрезать или замазать то место, где стоит подпись или логотип, но это все равно лучше, чем вообще не пытаться защитить свои изображения от посягательств со стороны конкурентов.

Для реализации защиты изображений на всем сайте нужно будет использовать 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
/* http://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; все ли вы правильно сделали.

Скачать данный пример защиты изображений от плагиата можно здесь: http://wm-help.net/download/image.protect.zip
автор: Беляев Александр


Реклама

 
Статьи  Статьи
При копировании информации,
ссылка на источник (phpcode.ru) желательна
© 2007 phpcode.ru