Hallo, Dennis,
ich musste den Code radikal umschreiben, er war wirklich grausig... wie kann man nur durchgehend anstatt if-Anweisungen dreifach konditionale Operatoren verwenden, dazu ist noch kein Stück im Script kommentiert, bäh... naja, hier das neue Script:
<?php
/*##############################################
# - Thumbnail-Script v1.3 - #
# Generating thumbnails 'on-the-fly' with PHP #
# #
# (c) by Christian Lamine, FlashDreams OHG #
# http://www.flashdreams.de/ #
# #
# This script may be freely used, distributed #
# and modified without any charge as long as #
# this copyright information is included. #
# #
# Any commercial selling of this script is #
# prohibited. #
# #
# The author is not responsible for possible #
# damage which may result from the application #
# of this script, neither direct nor indirect. #
# Use at your own risk! #
##############################################*/
error_reporting(0);
$types=array (1 => 'gif', 'jpeg', 'png', 'swf', 'psd', 'wbmp');
// Ich bin mir unsicher, wie man diesen Ausdruck positivieren kann;
// einer oder beide GET-Parameter müssen angegeben sein und Zahlen sein.
// Ich habe ihn erst einmal unverändert übernommen, denn ich hätte
// ihn nur durch zwei If-Anweisungen ersetzen können. --molily
if (
(!isset($_GET['x']) || preg_match('~[1]+$~', $_GET['x'])) &&
(!isset($_GET['y']) || preg_match('~[2]+$~', $_GET['y'])) &&
(isset($_GET['x']) || isset($_GET['y']))
) {} else {die ('Fehlende(r) oder ungültige(r) Größenparameter!');}
if (!isset($_GET['resize']) || !preg_match('~[3]$~', $_GET['resize']))
$resize=0;
if (!isset($_GET['aspectratio']) || !preg_match('~[4]$~', $_GET['aspectratio']))
if (isset($_GET['x']) && isset($_GET['y']))
$aspectratio=true;
else
$aspectratio=false;
if (!isset($_GET['image'])) {
die('Es wurde kein Bild angegeben!');
} else {
if (!file_exists($_GET['image']))
die('Die angegebene Datei konnte nicht auf dem Server gefunden werden!');
}
$imagedata=getimagesize($image);
if (!$imagedata[2] || $imagedata[2]==4 || $imagedata[2]==5)
die('Bei der angegebenen Datei handelt es sich nicht um ein Bild!');
eval ('
if (!(imagetypes() & IMG_'.strtoupper($types[$imagedata[2]]).')) die ("Das ".strtoupper($types[$imagedata[2]])."-Format wird nicht unterstützt!");
');
if (!isset($_GET['x'])) $x=floor($_GET['y'] * $imagedata[0] / $imagedata[1]);
if (!isset($_GET['y'])) $y=floor ($_GET['x'] * $imagedata[1] / $imagedata[0]);
if ($aspectratio && isset($_GET['x']) && isset ($_GET['y'])) {
if ($imagedata[0] > $imagedata[1]) {
$y=floor($_GET['x'] * $imagedata[1] / $imagedata[0]);
} elseif ($imagedata[1] > $imagedata[0]) {
$x=floor($_GET['y'] * $imagedata[0] / $imagedata[1]);
}
}
header('Content-Type: image/'.$types[$imagedata[2]]);
$image=call_user_func('imagecreatefrom'.$types[$imagedata[2]], $image);
$thumb=imagecreate ($x, $y);
imagecopyresized($thumb, $image, 0, 0, 0, 0, $x, $y, $imagedata[0], $imagedata[1]);
call_user_func('image'.$types[$imagedata[2]], $thumb);
imagedestroy ($image);
imagedestroy ($thumb);
?>
Wenn's nicht funktioniert, frage noch einmal, ich habe es hier auf dem PHP 4.2.3 (Win32) als Apache-Modul getestet, mit Safe Mode an und register_globals aus, AFAIR.
Mathias