我想编写验证码,但由于某种原因,我创建的图片没有显示(它只显示一个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>
当你只是去图像网址时,你会得到什么?然后您可能会看到错误(我在代码中看到的是,当您尝试运行此代码时,也许您在环境中没有 GD php 扩展(。您也可以尝试将图片网址更改为$_SERVER['PHP_SELF'] . '?captcha=1'
要解决此错误:
- 在脚本顶部添加
error_reporting(E_ALL); ini_set('display_errors', 'On');
session_start();
- 暂时注释掉
header("Content-type: image/png");
,这样浏览器就不会强制将其作为图像并阻止视图源工作 - 直接导航到 script.php?captcha=1 并查看显示的错误消息。
很可能您缺少GD或FreeType,或者会话配置在服务器上丢失。
您的$font = './captcha.ttf';
在正确的位置吗?