Image Resize Function geht bei If-Abfrage nicht
Dorfl
- php
0 Der Martin
0 Tom
Hallo,
ich versuche testweise eine Funktion zum Verkleinern von Bildern zu verwenden, die ich auf http://www.php.net/manual/de/function.imagecopyresized.php#85152 gefunden habe.
Konkret sieht das wie im Folgenden aus, die Eingabe der Daten kommt durch ein Formular. Überprüfungen der Eingabe hab ich weggelassen, das es nur um das grundsätzliche Problem geht.
$tmpname = $_FILES['theimage']['tmp_name'];
@img_resize( $tmpname , 600 , "data" , "bild_1.jpg");
function img_resize( $tmpname, $size, $save_dir, $save_name )
{
$save_dir .= ( substr($save_dir,-1) != "/") ? "/" : "";
$gis = GetImageSize($tmpname);
$type = $gis[2];
switch($type)
{
case "1": $imorig = imagecreatefromgif($tmpname); break;
case "2": $imorig = imagecreatefromjpeg($tmpname);break;
case "3": $imorig = imagecreatefrompng($tmpname); break;
default: $imorig = imagecreatefromjpeg($tmpname);
}
$x = imageSX($imorig);
$y = imageSY($imorig);
if($gis[0] <= $size)
{
$av = $x;
$ah = $y;
}
else
{
$yc = $y*1.3333333;
$d = $x>$yc?$x:$yc;
$c = $d>$size ? $size/$d : $size;
$av = $x*$c; //высота исходной картинки
$ah = $y*$c; //длина исходной картинки
}
$im = imagecreate($av, $ah);
$im = imagecreatetruecolor($av,$ah);
if (imagecopyresampled($im,$imorig , 0,0,0,0,$av,$ah,$x,$y))
if (imagejpeg($im, $save_dir.$save_name))
return true;
else
return false;
}
Diese Verarbeitung der hochgeladenen Datei funktioniert, das Bild taucht im entsprechenden Verzeichnis auf.
Sobald ich aber auch nur die simpelste If-Abfrage vor diese Funktion stelle, funktioniert nichts mehr. Es erscheint lediglich eine weiße Seite.
Selbst
if (1 == 1) {
*funktion*
}
reicht schon aus dass es nicht mehr geht.
Kann mir jemand dabei auf die Sprünge helfen, woran das liegt?
Mir ist nicht klar, was in der Funktion es verbietet, diese in eine If-Abfrage zu stecken.
Benötigen würde ich diese Abfrage z.B. um zu überprüfen, ob es sich um eine zulässige Datei handelt.
Gruß Dorfl
Hi,
Selbst
if (1 == 1) {
*funktion*
}reicht schon aus dass es nicht mehr geht.
wie äußert sich das, dass "es nicht mehr geht"? Welche Fehlermeldungen bekommst du?
Lässt du überhaupt alle Fehlermeldungen anzeigen?
stellst du die if-Abfrage vor die *Definition* der Funktion, oder vor den *Aufruf* der Funktion?
Wenn es um den Funktionsaufruf geht, sollte das völlig normal funktionieren.
Wenn du aber die Definition der Funktion in eine if-Abfrage stellst, kann das natürlich nur schiefgehen - denn PHP versucht dann, eine Funktion aufzurufen, die nie definiert wurde.
Andernfalls solltest du etwas gesprächiger werden.
So long,
Martin
wie äußert sich das, dass "es nicht mehr geht"? Welche Fehlermeldungen bekommst du?
Lässt du überhaupt alle Fehlermeldungen anzeigen?
error_reporting(E_ALL);
ini_set('display_errors', 1);
sind aktiviert, das "Nicht-funktionieren" äußerst sich aber wie schon erwähnt einfach in einer blanken Seite.
stellst du die if-Abfrage vor die *Definition* der Funktion, oder vor den *Aufruf* der Funktion?
Wenn es um den Funktionsaufruf geht, sollte das völlig normal funktionieren.
Wenn du aber die Definition der Funktion in eine if-Abfrage stellst, kann das natürlich nur schiefgehen - denn PHP versucht dann, eine Funktion aufzurufen, die nie definiert wurde.
Ich sehe nicht ganz wie da etwas nicht definiert werden kann. Die verwendete Abfrage If (1 == 1) ist ja in jedem Fall wahr, also sollte doch auch der folgende Code normal gelesen werden.
Und manchmal ist es doch so einfach...
Ein kleiner Tippfehler war hier Wurzel des Problems. Manchmal sieht man echt den Wald vor lauter Bäumen nicht.
Ganz unnütz war dieser Thread aber nicht, die Tipps zur Verbesserung der Funktion werde ich mir mal anschauen.
Hi!
Ein kleiner Tippfehler war hier Wurzel des Problems. Manchmal sieht man echt den Wald vor lauter Bäumen nicht.
Wenn sich dadurch eine leere Ausgabe ergibt, kann dies an unterdrückten Script-Start-Meldungen liegen. Überprüf doch mal display_startup_errors sowie display_errors und error_reporting direkt nach dem Scriptstart. Wenn diese nicht aktiv sind, hilft es aber für Fehler beim Parsen nicht mehr, sie im Script umzustellen. Das muss PHP-global oder spätestens in der Per-Verzeichnis-Konfiguration (je nach Apache-Einbindung und PHP-Version) erfolgen.
Lo!
Hello,
es fehlt wohl einfach eine schließende Klammer für diese Funktion, die aber selber noch sehr verbesserungswürdig ist.
Ein paar Kontrollen, ob die Unteraufgaben ordnungsgemäß erledigt wurden, wären schon hilfreich.
Ob man dann aber bei Misserfolg nur "return false" schreiben darf, oder ggf. noch belegte Handles zurückgeben muss, das mag ich hier jetzt nicht diskutieren. Nimm den nachfolgenden Code also nur als Anregung für die nachzubessernden Dinge...
function img_resize( $tmpname, $size, $save_dir, $save_name )
{
$save_dir . = ( substr($save_dir,-1) != "/") ? "/" : "";
$gis = GetImageSize($tmpname);
if ($gis === false ) return false;
$type = $gis[2];
switch($type)
{
case "1": $imorig = imagecreatefromgif($tmpname); break;
case "2": $imorig = imagecreatefromjpeg($tmpname);break;
case "3": $imorig = imagecreatefrompng($tmpname); break;
default: $imorig = imagecreatefromjpeg($tmpname);
}
if ($imorig === false ) return false;
$x = imageSX($imorig);
$y = imageSY($imorig);
if($gis[0] <= $size)
{
$av = $x;
$ah = $y;
}
else
{
$yc = $y * 1.3333333;
$d = $x > ($yc?$x:$yc); ## hab ich noch nicht weiter drüber nachgedacht...
$c = $d > ($size ? $size/$d : $size);
$av = $x * $c; //?????? ???????? ????????
$ah = $y * $c; //????? ???????? ????????
}
# $im = imagecreate($av, $ah); ## ent oder weder
# if ($im === false) return false;
$im = imagecreatetruecolor($av,$ah);
if ($im === false) return false;
if (imagecopyresampled($im,$imorig , 0,0,0,0,$av,$ah,$x,$y))
{
if (imagejpeg($im, $save_dir.$save_name))
{
return true;
}
else
{
return false;
}
}
}
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg