【发布时间】:2017-08-11 19:36:08
【问题描述】:
我想编写一个验证码,但由于某种原因我创建的图片没有显示(它只显示一个 img 错误符号) 你能告诉我我的错误在哪里吗? 其他人告诉我他们使用几乎相同的代码并且对他们来说工作正常我只是看不到我的错误..也是我第一次尝试使用验证码
<?php
session_start();
function generateCaptcha($_SESSIONNAME) {
// Überprüfen ob der Sessionname leer ist
if(trim($_SESSIONNAME) == '')
die('Sessionname ist leer!');
//schrift fuer captcha
$font = './captcha.ttf';
//bild erstellen auf den der captcha erscheint
$image = imagecreate(125, 30);
//weiß faerben des bildes
imagecolorallocate($image, 255, 255, 255);
//links 5 px Initialwert
$left = 5;
//alle zulaessigen Buchstaben (aehnliche rausgenommen)
$allowed = 'aAbBcCdDeEfFgGhHijJkKLmMnNpPqrRsStTuUvVwWxXyYzZ1234578';
//string fuer zufall code
$string = '';
for($i = 1;$i <= 6;$i++) // 6 Zeichen
{
//random nummer mit str laenge -1
$code = $allowed{rand(0, strlen($allowed) - 1)};
//das
$string .= $code; // Das Zeichen an den gesamten Code anhängen
imagettftext($image, 20, rand(-10, 10), $left + (($i == 1?5:15) * $i), 25, imagecolorallocate($image, 200, 200, 200), $font, $code);
// Das gerade herausgesuchte Zeichen dem Bild hinzufügen
imagettftext($image, 16, rand(-15, 15), $left + (($i == 1?5:15) * $i), 25, imagecolorallocate($image, 69, 103, 137), $font, $code);
// Das Zeichen noch einmal hinzufügen, damit es für einen Bot nicht zu leicht lesbar ist
}
$_SESSION[$_SESSIONNAME] = $string; // Den Code in die Session mit dem Sessionname speichern für die Überprüfung
header("Content-type: image/png"); // Header für ein PNG Bild setzen
imagepng($image); // Ausgaben des Bildes
imagedestroy($image); // Bild zerstören
}
$sessionName = 'captchacode'; // Sessionname
if(isset($_GET['captcha']))
{
//aufruf der funltion(parameter = sessionname)
generateCaptcha($sessionName);
//beenden
exit();
}
//pruefen ob form gesendet wurde
if(isset($_POST['check']))
{
// Vergleich eingabe und code
if($_SESSION[$sessionName] == trim($_POST['captcha']))
echo "Richtig";
else
echo "Falsch";
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<fieldset>
<label for="captcha">
Captcha
</label>
<input type="text" name="captcha" id="captcha" />
<img src="<?php echo $_SERVER['PHP_SELF']; ?>?captcha" alt="" />
<button type="submit" name="check">Überprüfen</button>
</fieldset>
</form>
【问题讨论】: