Da Bots das Gästebuch zuspammen versuche ich eine Sicherheitsabfrage zu machen (Captcha). Also ein Bild anzeigen auf welchem eine Nummer angezeigt wird. Und diese muss man eingeben und dann wird der Beitrag gespeichert.
Das Bild mit dem Code wird allerdings nicht angezeigt. Und wenn ich den Header rausnehme wird auch keine Fehlermeldung angezeigt. Weiss jemand wo das Problem sich versteckt hat?
Dieser Code zeigt einfach ein Formular an sowie das Bild, in welchem der Code dargestellt wird.
Hier wird das Bild mit dem Code erzeugt.
imagejpeg($image,$DIR.'/'.$_GET['hash'].$A.$B.$C.$D.$E.$F,90);
Das Bild wird auf dem Dateisystem wirklich erstellt. Aber angezeigt wird es nicht....
Danke für eure Hilfe!!
Gruss
X
Edit:
Ach ja, die Schriften (TTF's) sind im gleichen Ordner gespeichert wie dieses File...
Das Bild mit dem Code wird allerdings nicht angezeigt. Und wenn ich den Header rausnehme wird auch keine Fehlermeldung angezeigt. Weiss jemand wo das Problem sich versteckt hat?
Dieser Code zeigt einfach ein Formular an sowie das Bild, in welchem der Code dargestellt wird.
PHP:
<?php
$__DR = $_SERVER['DOCUMENT_ROOT'];
// Verzeichnis wo die temporären Dateien abgelegt werden
$DIR = $__DR . '/tmp';
// prüfe ob Formular gesendet wurde
if (!$_POST['loesung']) {
// formular noch nicht gesendet, erzeuge Hash, schreibe den ins Formular und binde BAR (als Bild) ein, übergib BAR den Hash
$hash = md5(uniqid (rand()));
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
echo '<p><input type="hidden" name="hash" value="'.$hash.'" /></p>';
echo '<p><img src="captcha.php?hash='.$hash.'" alt="captcha" /></p>';
echo '<p>Gib die Lösung ein:<br /><input type="text" name="loesung" size="6" /></p>';
echo '<input type="submit" value="submit">';
echo '</form>';
} else {
// formular gesendet, prüfe ob datei existiert, wenn dann löschen und dann statusmeldung
if (file_exists($DIR.'/'.$_POST['hash'].$_POST['loesung'])) {
@unlink($DIR.'/'.$_POST['hash'].$_POST['loesung']);
echo '<p>Richtig gelöst</p>';
} else {
echo '<p>Falsch gelöst</p>';
}
}
?>
Hier wird das Bild mit dem Code erzeugt.
PHP:
<?php
$__DR = $_SERVER['DOCUMENT_ROOT'];
// Verzeichnis wo die temporären Dateien abgelegt werden
$DIR = $__DR . '/tmp';
// Verzeichnis wo die TTF-Schriften liegen
// die müssen durchnumeriert sein, in dem Beispiel 1f - 7f
// hier aktuelles Verzeichnis
$FONTS = ".";
// leeres weißes Bild erzeugen
$image = imagecreatetruecolor(155,40);
$bgColor = ImageColorAllocate($image, 255, 255, 255);
ImageFilledRectangle($image, 0, 0, 155, 40, $bgColor);
// Schriftfarbe
$color = imagecolorallocate($image,0,0,0);
// Schriftgröße
$size=20;
// unsere Zufallszahlen, die 1 ist nicht mit dabei, wegen Verwechslungsgefahr mit der 7
$A = rand(2,9);
$B = rand(2,9);
$C = rand(2,9);
$D = rand(2,9);
$E = rand(2,9);
$F = rand(2,9);
// Zahlen auf das Bild zeichnen, Position etwas variieren, zufällig eine Schriftart auswählen (1f-7f)
imagettftext($image, $size, 0, 5, 25+rand(0,10), $color, $FONTS.'/'.rand(1,7).'f',$A);
imagettftext($image, $size, 0, 30, 25+rand(0,10), $color, $FONTS.'/'.rand(1,7).'f',$B);
imagettftext($image, $size, 0, 55, 25+rand(0,10), $color, $FONTS.'/'.rand(1,7).'f',$C);
imagettftext($image, $size, 0, 80, 25+rand(0,10), $color, $FONTS.'/'.rand(1,7).'f',$D);
imagettftext($image, $size, 0, 105, 25+rand(0,10), $color, $FONTS.'/'.rand(1,7).'f',$E);
imagettftext($image, $size, 0, 130, 25+rand(0,10), $color, $FONTS.'/'.rand(1,7).'f',$F);
// Header für JPEG-Bild ausgeben
header("Content-Type: image/jpeg");
// Bild ausgeben und im Verzeichnis abspeichern, Dateiname aus den Zufallszahlen bilden
//echo $DIR.'/'.$_GET['hash'].$A.$B.$C.$D.$E.$F . "<br />";
imagejpeg($image,$DIR.'/'.$_GET['hash'].$A.$B.$C.$D.$E.$F,90);
// Speicher vom Bild wieder freigeben, besser ist das ;-)
imagedestroy($image);
?>
imagejpeg($image,$DIR.'/'.$_GET['hash'].$A.$B.$C.$D.$E.$F,90);
Das Bild wird auf dem Dateisystem wirklich erstellt. Aber angezeigt wird es nicht....
Danke für eure Hilfe!!
Gruss
X
Edit:
Ach ja, die Schriften (TTF's) sind im gleichen Ordner gespeichert wie dieses File...
Zuletzt bearbeitet: