PHP GD пиявка с водяным знаком - PullRequest
1 голос
/ 21 августа 2010

Мне было интересно, может ли кто-нибудь предоставить мне учебное пособие или исходный код, позволяющий сделать так, чтобы, если люди выкладывают изображения с моих сайтов и встраивают их в свои форумы или сайты, на них появляется водяной знак, но если они его просматриваютна моем сайте они не будут водяным знаком?

Ответы [ 3 ]

4 голосов
/ 21 августа 2010

Хотя Piskvor является на 100% правильным, я просто хотел бы добавить как , чтобы получить реферер в PHP.

Используйте $_SERVER['HTTP_REFERER'], чтобы получить заголовок Referer, отправленный с клиента. Если ваш веб-сайт www.example.com, в качестве имени домена всегда должен использоваться «www.example.com».

Теперь, чтобы проверить доменное имя, давайте использовать parse_url() для разбора URL-адреса в массив и извлечения различных частей. Возвращает массив, давайте назовем это $url, и чтобы получить имя домена, используйте $url['host']. Теперь сравните это с вашим собственным доменным именем, чтобы убедиться, что оно находится в вашем домене.

Полный пример:

$referrer = $_SERVER['HTTP_REFERER'];
$url = parse_url($referrer);
if($url['host'] == 'www.example.com')
{
  // Is from www.example.com
}else{
  // Is from other website
}
3 голосов
/ 21 августа 2010

Во-первых, небольшой обход HTTP

HTTP, по сути, является основным протоколом Интернета - используется для передачи гипертекста (веб-страниц), изображений и других носителей.С самого начала HTTP был спроектирован как без состояний - среди прочего это означает, что невозможно определить, принадлежит ли запрос изображения «странице» той или иной странице.

По сути, в HTTP есть два обходных пути, но ни один из них не является надежным на 100%: куки и заголовок Referer.

С помощью куки вы можете установить куки, когда пользователь заходит на вашу страницу, а затем проверить это при обслуживанииизображения.Это может привести к проблемам с параллелизмом при первом входе на страницу.

При Referer браузер отправляет запрос на изображение, с которого загружается изображение.К сожалению, реферер может быть легко изменен или удален пользователем или программным обеспечением безопасности.

Что это значит для вас

Я предлагаю вам использовать поле Реферер - хотя оно не надежно на 100%большинство людей не будут возиться с этим, а те, кто беспокоится, могут преодолеть любую другую защиту.

Вам нужно будет обрабатывать изображения с помощью сценария (например, PHP).

http://example.com/img.php?id=12345 - псевдокод для чека, PHP для самого водяного знака:

check if the image with given ID exists, else throw a 404 and end
check the referer - if it matches your site, just readfile() the relevant image and exit
if we're here, referer is wrong - you'll need the watermark:
// PHP code from now on
$original = imagecreatefromjpeg($original_image_path);
$watermark =  imagecreatefromjpeg($watermark_image_path);
imagecopymerge ( $original, $watermark, 0,0,0,0, $watermark_width, $watermark_height, $opacity);
header('Content-Type: image/jpeg');
imagejpeg($original);
exit;
0 голосов
/ 17 августа 2011

Для больших изображений ответ Писквора слишком велик на ресурсах сервера.Также могут быть последствия кэширования клиента, которые увеличивают задержку без необходимости.

Вместо этого я бы реализовал обнаружение рефералов в файле .htaccess, чтобы все запросы с вашим доменным именем в реферале или пустым рефералом шли прямо на изображение снет обработки PHP.Любой другой случай означает горячую ссылку, и поэтому будет обслуживаться сценарий водяного знака.

...