molily: Thumbs ohne Cache

Beitrag lesen

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


  1. 0-9 ↩︎

  2. 0-9 ↩︎

  3. 0|1 ↩︎

  4. 0|1 ↩︎