Водяной знак, средством htaccess \ изменение директории исполняющего файла

El Diablo

Доброе зло
Доброго времени суток, давно нашел метод защиты водяным знаком ( далее вз ) суть заключалась в том, что в директорию с размещался файл .htaccess со следующим кодом:

PHP:
DirectoryIndex index.php 
<FilesMatch "\.(gif|jpg|JPG|png)$"> 
  RewriteEngine On 
  RewriteCond %{REQUEST_FILENAME} -f 
  RewriteRule /wm/_wmmax.php [T=application/x-httpd-php,L,QSA] 
</FilesMatch>
далее в изначальную директорию размещалась папка wm в которой содержались исполняющие файлы и сам вз, суть исполняющих файлов:

файл: _wmmax
PHP:
<?
waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark_max.png", "bottom=5,right=5");
//waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark.png", "middle=0,center=0"); 
function waterMark($original, $watermark, $placement = 'bottom=5,right=5', $destination = null) { 
  $original = urldecode($original);
  $info_o = @getImageSize($original); 
  if (!$info_o) 
        return false; 
  $info_w = @getImageSize($watermark); 
  if (!$info_w) 
        return false; 
  list ($vertical, $horizontal) = split(',', $placement,2); 
  list($vertical, $sy) = split('=', trim($vertical),2); 
  list($horizontal, $sx) = split('=', trim($horizontal),2); 
  switch (trim($vertical)) { 
      case 'bottom': 
        $y = $info_o[1] - $info_w[1] - (int)$sy; 
        break; 
      case 'middle': 
        $y = ceil($info_o[1]/2) - ceil($info_w[1]/2) + (int)$sy; 
        break; 
      default: 
        $y = (int)$sy; 
        break; 
      } 
  switch (trim($horizontal)) { 
      case 'right': 
        $x = $info_o[0] - $info_w[0] - (int)$sx; 
        break; 
      case 'center': 
        $x = ceil($info_o[0]/2) - ceil($info_w[0]/2) + (int)$sx; 
        break; 
      default: 
        $x = (int)$sx; 
        break; 
      } 
  header("Content-Type: ".$info_o['mime']); 
  $original = @imageCreateFromString(file_get_contents($original)); 
  $watermark = @imageCreateFromString(file_get_contents($watermark)); 
  $out = imageCreateTrueColor($info_o[0],$info_o[1]); 
  imageCopy($out, $original, 0, 0, 0, 0, $info_o[0], $info_o[1]); 
  if( ($info_o[0] > 250) && ($info_o[1] > 250) )
  {
  imageCopy($out, $watermark, $x, $y, 0, 0, $info_w[0], $info_w[1]);
  }
  switch ($info_o[2]) { 
      case 1: 
        imageGIF($out); 
        break; 
      case 2: 
        imageJPEG($out); 
        break; 
      case 3: 
        imagePNG($out); 
        break; 
        } 
  imageDestroy($out); 
  imageDestroy($original); 
  imageDestroy($watermark); 
  return true; 
  } 
?>
и файл _wmmin

PHP:
<?
waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark_min.png", "bottom=5,right=5");
//waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark.png", "middle=0,center=0"); 
function waterMark($original, $watermark, $placement = 'bottom=5,right=5', $destination = null) { 
  $original = urldecode($original);
  $info_o = @getImageSize($original); 
  if (!$info_o) 
        return false; 
  $info_w = @getImageSize($watermark); 
  if (!$info_w) 
        return false; 
  list ($vertical, $horizontal) = split(',', $placement,2); 
  list($vertical, $sy) = split('=', trim($vertical),2); 
  list($horizontal, $sx) = split('=', trim($horizontal),2); 
  switch (trim($vertical)) { 
      case 'bottom': 
        $y = $info_o[1] - $info_w[1] - (int)$sy; 
        break; 
      case 'middle': 
        $y = ceil($info_o[1]/2) - ceil($info_w[1]/2) + (int)$sy; 
        break; 
      default: 
        $y = (int)$sy; 
        break; 
      } 
  switch (trim($horizontal)) { 
      case 'right': 
        $x = $info_o[0] - $info_w[0] - (int)$sx; 
        break; 
      case 'center': 
        $x = ceil($info_o[0]/2) - ceil($info_w[0]/2) + (int)$sx; 
        break; 
      default: 
        $x = (int)$sx; 
        break; 
      } 
  header("Content-Type: ".$info_o['mime']); 
  $original = @imageCreateFromString(file_get_contents($original)); 
  $watermark = @imageCreateFromString(file_get_contents($watermark)); 
  $out = imageCreateTrueColor($info_o[0],$info_o[1]); 
  imageCopy($out, $original, 0, 0, 0, 0, $info_o[0], $info_o[1]); 
  if( ($info_o[0] > 250) && ($info_o[1] > 250) )
  {
  imageCopy($out, $watermark, $x, $y, 0, 0, $info_w[0], $info_w[1]);
  }
  switch ($info_o[2]) { 
      case 1: 
        imageGIF($out); 
        break; 
      case 2: 
        imageJPEG($out); 
        break; 
      case 3: 
        imagePNG($out); 
        break; 
        } 
  imageDestroy($out); 
  imageDestroy($original); 
  imageDestroy($watermark); 
  return true; 
  } 
?>
так вот нюанс в том, что если к примеру у меня сайт находится в директории domain/mysite/ то файл htaccess закидывается к примеру в директорию domain/mysite/img но сам исполняющий файл должен находится в изначальной директории где находится директория domains и на некоторых хостингах это не работает, теперь вопрос, подскажите как изменить файл htaccess что бы он искал исполняющий файл в директории сайта, а не в изначальной директории ?

я так понял нужно задать путь в этой строчке?
PHP:
RewriteRule /wm/_wmmax.php [T=application/x-httpd-php,L,QSA]
 

hell0w0rd

Продвинутый новичок
Защита от чего?)
Тебе так сервер положат. В момент загрузки картинки надо ее обрабатывать: жать, ставить водяной знак - что угодно. Можно класть в очередь, чтобы пользователь всего этого не ждал. Но смысл в том, чтобы это происходило до отдачи клиенту
 

AnrDaemon

Продвинутый новичок
И лучше всего - происходило один раз на картинку.
 

El Diablo

Доброе зло
Я иного ответа не ожидал т.к. это самые адекватные и разумные действия, но не в моем случае, суть такова, что сам водяной знак достаточно часто меняется, и в альбомах обычно 2-3 фотографии, с учетом посетителей проекта 2-3 человека в день (закрытый проект), по этому мне нужно решить именно вышеописанную задачу.
 

AnrDaemon

Продвинутый новичок
От частоты смены знака принцип не меняется. Чиатем про шаблонизацию и кеширование.
 
Сверху