Ich benutze ein Skript um in Grafiken in einem Verzeichnis ein Watermark Image 'on-the-fly' einzufügen. Dazu benutze ich in dem Verzeichnis in dem die Grafiken (jpg in diesem Beispiel) liegen, folgenden Eintrag in .htaccess:
Code: Select all
RewriteEngine on
Options FollowSymlinks
RewriteBase /
AddHandler wtmrk jpg
action wtmrk /modify.phpQuellcode:
Code: Select all
<?
/*
 activeWatermark
 Free script that places watermark on images in folder
 Copyright (C) 2005 ActiveUnit.com
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
 // IMAGE WATERMARK (comment line below if you do not want to use image watermark)
 Define('WATERMARK_IMAGE', $_SERVER['DOCUMENT_ROOT'] . '/img/watermark/watermark.png'); // path to watermark image
 Define('WATERMARK_PERCENT', '50'); // Intensity of the transition (in percent)
 // TEXT WATERMARK (comment line below if you do not want to use text)
 //Define('WATERMARK_TEXT', 'Copyright (c) 2005 www.activeunit.com'); // text to place (image will not be used)
 Define('WATERMARK_TEXT_FONT', '3'); // font 1 / 2 / 3 / 4 / 5
 Define('TEXT_SHADOW', '1'); // 1 - yes / 0 - no
 Define('TEXT_COLOR', '#FFFFFF'); // text color 
 // GENERAL SETTINGS
 Define('WATERMARK_ALIGN_H', 'right'); // left / right / center
 Define('WATERMARK_ALIGN_V', 'bottom'); // top / bottom / center
 Define('WATERMARK_MARGIN', '10'); // margin
// ----------------------------------------------------------------------------------------
/* ======================== Dirty FIX for switching between php4 and php5 ==== */
 if (!isset($_SERVER['PATH_INFO'])) { $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
	}
 $dr=preg_replace('/modify.php.+/', '', $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO']);
 $filename=str_replace($dr, './', $_SERVER['PATH_INFO']);
 $lst=GetImageSize($filename);
 $image_width=$lst[0];
 $image_height=$lst[1];
 $image_format=$lst[2];
if ($image_format==1) {
	// GIF format, send proper content-type and do not process
	Header("Content-Type: image/gif");
	readfile($filename);
	exit;
}
elseif ($image_format==2) {
	// JPEG format, send proper content-type and process
	Header("Content-Type: image/jpg");
	$old_image=imagecreatefromjpeg($filename);
}
elseif ($image_format==3) {
	// PNG format, send proper content-type and process
	Header("Content-Type: image/png");
	$old_image=imagecreatefrompng($filename);
}
else {
	// Show error message instead
	Header("Content-Type: text/plain");
	echo "Unknown file format: $filename";
	exit;
}
 if (Defined('WATERMARK_TEXT') && WATERMARK_TEXT!='') {
 // text
  $color = eregi_replace("#","", TEXT_COLOR);
  $red = hexdec(substr($color,0,2));
  $green = hexdec(substr($color,2,2));
  $blue = hexdec(substr($color,4,2));
  $text_color = imagecolorallocate ($old_image, $red, $green, $blue); 
  $text_height=imagefontheight(WATERMARK_TEXT_FONT);
  $text_width=strlen(WATERMARK_TEXT)*imagefontwidth(WATERMARK_TEXT_FONT);
  $wt_y=WATERMARK_MARGIN;
  if (WATERMARK_ALIGN_V=='top') {
   $wt_y=WATERMARK_MARGIN;
  } elseif (WATERMARK_ALIGN_V=='bottom') {
   $wt_y=$image_height-$text_height-WATERMARK_MARGIN;
  } elseif (WATERMARK_ALIGN_V=='center') {
   $wt_y=(int)($image_height/2-$text_height/2);
  }
  $wt_x=WATERMARK_MARGIN;
  if (WATERMARK_ALIGN_H=='left') {
   $wt_x=WATERMARK_MARGIN;
  } elseif (WATERMARK_ALIGN_H=='right') {
   $wt_x=$image_width-$text_width-WATERMARK_MARGIN;
  } elseif (WATERMARK_ALIGN_H=='center') {
   $wt_x=(int)($image_width/2-$text_width/2);
  }
  if (TEXT_SHADOW=='1') {
   imagestring($old_image, WATERMARK_TEXT_FONT, $wt_x+1, $wt_y+1, WATERMARK_TEXT, 0);
  }
  imagestring($old_image, WATERMARK_TEXT_FONT, $wt_x, $wt_y, WATERMARK_TEXT, $text_color);
 } 
 
 if (Defined('WATERMARK_IMAGE') && WATERMARK_IMAGE!='' && file_exists(WATERMARK_IMAGE) &&  ($image_width > 200)) {
 // image
 $lst2=GetImageSize(WATERMARK_IMAGE);
 $image2_width=$lst2[0];
 $image2_height=$lst2[1];
 $image2_format=$lst2[2];
 if ($image2_format==2) {
  $wt_image=imagecreatefromjpeg(WATERMARK_IMAGE);
 } elseif ($image2_format==3) {
  $wt_image=imagecreatefrompng(WATERMARK_IMAGE);
 }
  if ($wt_image) {
   $wt_y=WATERMARK_MARGIN;
   if (WATERMARK_ALIGN_V=='top') {
    $wt_y=WATERMARK_MARGIN;
   } elseif (WATERMARK_ALIGN_V=='bottom') {
    $wt_y=$image_height-$image2_height-WATERMARK_MARGIN;
   } elseif (WATERMARK_ALIGN_V=='center') {
    $wt_y=(int)($image_height/2-$image2_height/2);
   }
   $wt_x=WATERMARK_MARGIN;
   if (WATERMARK_ALIGN_H=='left') {
    $wt_x=WATERMARK_MARGIN;
   } elseif (WATERMARK_ALIGN_H=='right') {
    $wt_x=$image_width-$image2_width-WATERMARK_MARGIN;
   } elseif (WATERMARK_ALIGN_H=='center') {
    $wt_x=(int)($image_width/2-$image2_width/2);
   }
   imagecopymerge($old_image, $wt_image, $wt_x, $wt_y, 0, 0, $image2_width, $image2_height, WATERMARK_PERCENT);
  }
 }
 if ($image_format==2) {
  imageJpeg($old_image);
 }
 if ($image_format==3) {
  imagePng($old_image);
 }
?>
Wenn ich dagegen FastCGI verwende (mod_fcgi) bekomme ich folgende Fehlermeldung im Error Log meines Indianers (Apache 2.2.4):
Code: Select all
[Sun Sep 06 02:34:56 2009] [warn] mod_fcgid: stderr: PHP Warning:  Unexpected character in input:  'x10' (ASCII=16) state=1 in /srv/www/vhosts/domain.tld/httpdocs/IMG.jpg on line 234
[Sun Sep 06 02:34:56 2009] [warn] mod_fcgid: stderr: PHP Parse error:  syntax error, unexpected '[' in /srv/www/vhosts/domain.tld/httpdocs/IMG.jpg on line 234Die php.ini ist in beiden Fällen identisch da sowohl bei CGI als auch bei FastCGI dieselbe
Code: Select all
/etc/php5/fastcgi/php.iniEdit:
short_open_tags = On ist gesetzt
Gibt es bei der Verwendung von mod_fcgi im Zusammenhang mit binary content irgendetwas besonderes zu beachten? In :google: habe ich jedenfalls keine spezifischen Problembeschreibungen im Zusammenhang mit binary content gefunden.

