Kein Bild bei Captcha

Ich wollte die Captch-Extension in Tip-a-friend einsetzen, um abzusichern, dass die Seite missbraucht wird. Ich habe mich für die einfachere Extension captcha entschieden. Diese läßt das Einsetzen von ttf-Schriften zu, die Buchstaben können gedreht und verschoben werden. Und einige Extensions so wie Tip-a-friend unterstützen die Captcha-Extensions, so weit sie installiert ist.

Nachdem ich beide Extensions installiert hatte und mir das Formular von Tip-a-friend (Taf) anzeigen ließ, wurde nur ein img-Tag generiert, d.h. die Extension wurde installiert und gefunden, es wurde jedoch kein Bild angezeigt. Es ist schwierig in diesem Fall zu debuggen, da das Bild mit dem Script erzeugt wird. Wenn man die Datei in einem anderen Fenster aufruft, so stehen einige Variablen aus der Session nicht zur Verfügung. Und in der Seite, in der das Bild eingebunden ist, kann man nicht debuggen, weil print_r, echt etc. einfach nicht angezeigt werden.

Die erste Möglichkeit, sich überhaupt etwas anzeigen zu lassen ist, im Quellcode der Rahmenextension (in diesem Fall Taf) aus dem Image-Tag ein Iframe-Tag zu machen. Wenn es ein Bild ist, dann ist es ein Bild, aber wenn es Fehlermeldungen gibt, werden die wenigestens angezeigt.


// OLD
$captchaHTMLoutput = t3lib_extMgm::isLoaded(‚captcha‘) ? ‚‚ : “;
// NEW
$captchaHTMLoutput = ‚‚;

Dann sollte man in einem Iframe die Fehlermeldungen bekommen. Bei mir waren die ersten Fehlermeldungen die Beschwerde darüber, dass define(PATH_this,…) so nicht korrekt ist. Also habe ich in allen define-Ausdrücken den ersten Parameter mit Anführungszeichen versehen, damit es ein String ist.

Dann gabs da noch eine Reihe von Notices und einen Errors. Die Funktion imagerotate wurde nicht gefunden. Nach ein bisschen Recherche stellte sich raus, dass die Funktion zwar eine php4-Funktion ist, es aber von der GD-Version abhängt, ob sie auch wirklich funktioniert. Eine Möglichkeit ist die Funktion einfach rauszukommentieren. Auf der php.net-Seite zu der Funktion finden sich in den Kommentaren Beispiele, wie man es anders umsetzen kann. Da es ja in Typo3 ist, kann man ja auf die Funktion von Imagemagick zurückgreifen.

if(function_exists(„imagerotate“)) {
$rot = imagerotate($tmpi, $da, $back);
} else {
$tmpfile = ‚img‘.rand(1000,9999).‘.png‘;
imagepng($tmpi,$tmpfile);
passthru(„convert -rotate $da $tmpfile -„);
unlink($tmpfile);
$rot = imagecreatefrompng($tmpfile);
}

Am Ende nicht vergessen, den Iframe-String zu entfernen und stattdessen den Image-Tag wieder reinzuschreiben. Und für alle Fälle das Error-Reporting ausschalten, damit das Bild generiert wird, auch wenns kleine Hinweise gibt:

ini_set(‚error_reporting‘,’0′);

4 Kommentare

  1. Georg

    Danke, allerdings lief das bei mir erst nach einigen Anpassungen.
    Statt passthru() sollte wohl exec() verwendet werden, um die vorzeitige Ausgabe der Daten zu verhindern, außerdem sollten die letzten beiden Zeilen getauscht werden (unlink() und $rot = …), sonst wird die Datei gelöscht, bevor sie verwendet werden kann. Außerdem braucht der Apache Schreibzugriff auf das Verzeichnis der Extension.

  2. Allerbesten Dank für den Input hier. Hat mir wirklich einiges an Nerven erspart. Auch an Georg, erst danach funktionierte alles einwandfrei…