dedlfix: Thumbnails-Code funktioniert nicht?

Beitrag lesen

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!