Thumbnails-Code funktioniert nicht?
adrian123
- php
Guten Abend!
Ich habe aus einem Programmier-Buch einen Code für Thumbnails abgeschrieben und ihn ausprobiert, doch er gibt mir Fehler aus. So ist es auch bisher gewesen mit allen anderen Thumbnail-Codes, die ich aus dem Internet runtergeladen hatte. In dem Buch steht, dass man um mit Bildern zu arbeiten die "php_gd.dll" in der "php.ini" im Hauptverzeichnis des Betriebsystems (C:\Windows) aktivieren muss. Da in diesem Verzeichnis keine php.ini war, habe ich eine von xampp genommen und dort reinkopiert und die php_gd.dll aktiviert, trotzdem erhalte ich dieselben Fehlermeldungen. Ist also an dem Script was falsch, oder was? ;)
Ich hoffe ihr könnt mir helfen
Hier das Script:
<?php
$src_file = "123.png";
$max_px = 100;
$dst_w = 0;
$dst_h = 0;
/* Dateityp ermitteln und öffnen */
$pos = strrpos($src_file,'.')+1;
$file_ext = substr($file,$pos);
switch(strToLower($file_ext))
{
case 'png':
$image_src = imageCreateFromPng($src_file);
break;
case 'jpg':
case 'jped':
$image_src = imageCreateFromJPEG($src_file);
break;
}
$src_w = imagesx($image_src);
$src_h = imagesy($image_src);
if ($src_w > $src_h)
{
$dst_w = $max_px;
$dst_h = (int) $max_px / ($src_w / $src_h);
}
elseif($src_w < $src_h)
{
$dst_h = $max_px;
$dst_w = (int) $max_px / ($src_h / $src_w);
}
else
{
$dst_w = $max_px;
$dst_h = $max_px;
}
$imagedst = imageCreateTrueColor($dst_w,$dst_h);
imageCopyResized($image_dst,$image_src,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
header('Content-Type: image/png');
imagePng($image_dst);
imageDestroy($image_src);
imageDestroy($image_dst);
?>
Folgende Fehlermeldungen erhalte ich:
Warning: imagesx(): supplied argument is not a valid Image resource in C:\xampp\htdocs\Making-the-Web\Scripts\Thumbnails\index.php on line 23
Warning: imagesy(): supplied argument is not a valid Image resource in C:\xampp\htdocs\Making-the-Web\Scripts\Thumbnails\index.php on line 24
Warning: imagecopyresized(): supplied argument is not a valid Image resource in C:\xampp\htdocs\Making-the-Web\Scripts\Thumbnails\index.php on line 43
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\Making-the-Web\Scripts\Thumbnails\index.php:23) in C:\xampp\htdocs\Making-the-Web\Scripts\Thumbnails\index.php on line 44
Warning: imagepng(): supplied argument is not a valid Image resource in C:\xampp\htdocs\Making-the-Web\Scripts\Thumbnails\index.php on line 45
Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\xampp\htdocs\Making-the-Web\Scripts\Thumbnails\index.php on line 46
Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\xampp\htdocs\Making-the-Web\Scripts\Thumbnails\index.php on line 47
Danke im voraus ;)
adrian
Hi,
Ist also an dem Script was falsch, oder was? ;)
Ja. Stelle das error_reporting auf E_ALL und display_errors auf on - dann sagt dir PHP auch, was das ist.
MfG ChrisB
Hi!
In dem Buch steht, dass man um mit Bildern zu arbeiten die "php_gd.dll" in der "php.ini" im Hauptverzeichnis des Betriebsystems (C:\Windows) aktivieren muss.
Welche Konfigurationsdateien PHP auswertet, sagt dir die phpinfo()-Ausgabe. Da das Buch diese nicht lesen kann, kann es nur raten und lag vermutlich falsch. Auswirkungen hatte das in deinem Fall keine, denn bei fehlender php_gd.dll hättest du einen Funktion-existiert-nicht-Fehler bekommen. Und wenn du die richtige php.ini erwischt hättest, wäre es möglicherweise auch noch ein Fehler gewesen, php_gd.dll statt php_gd2.dll zu aktivieren.
Ist also an dem Script was falsch, oder was? ;)
Ja, auch das.
/* Dateityp ermitteln und öffnen */
$pos = strrpos($src_file,'.')+1;
$file_ext = substr($file,$pos);
Das ist ein Zugriff auf eine nicht existente Variable namens $file. Der ergibt NULL. Ein Teilstring davon ergibt einen Leerstring. Solche Fehler würden dir angezeigt, wenn du (zumindest zum Testen) das error_reporting auf E_ALL (und display_errors auf on) stehen hättest.
Obendrein kann man das kürzer notieren:
$file_ext = pathinfo($src_file, PATHINFO_EXTENSION);
switch(strToLower($file_ext))
{
case 'png':
$image_src = imageCreateFromPng($src_file);
break;
case 'jpg':
case 'jped':
$image_src = imageCreateFromJPEG($src_file);
break;
}
Die Bedingung trifft nun nicht zu, $image_src bleibt undefiniert und ist damit kein gültiges Argument für diese beiden Funktionen.
$src_w = imagesx($image_src);
$src_h = imagesy($image_src);
Die beklagen sich und geben ihrerseits false als Ergebnis zurück, was aufgrund der nicht vorhandenen Auswertung einfach an die nächsten Funktionen weitergereicht wird und so gibt es weitere Folgefehler. Typisch für Schönwetterprogrammierung.
Angenommen, das switch wäre einem der case-Zweige gefolgt, so bestünde immer noch die Möglichkeit, dass die Datei nicht gelesen werden kann (beispielsweise unzureichende Berechtigung oder kein Bildinhalt), was dann ebenfalls ein false ergibt, das nicht abgefangen wurde. Der Rest sind ebenfalls Folgefehler.
Wenn du das Script verwenden willst, so schau dir an, was es funktional täte, wenn es richtig programmiert wäre und füge Auswertungen der Rückgabeergebnisse ein. Achte ebenso darauf, dass keine Verzweigung existiert, bei der für den nachfolgenden Code Voraussetzungen fehlen. Dem switch-Konstrukt mangelt es nämlich auch noch an einem default-Zweig, der einspringt, wenn weder png noch jpg übergeben wurde. In dem Fall existiert $image_src gar nicht, was die gleichen Folgefehler ergibt. Obendrein sollte 'jped' wohl auch noch 'jpeg' heißen.
Lo!