验证码图像未显示在浏览器中



我想编写验证码,但由于某种原因,我创建的图片没有显示(它只显示一个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';在正确的位置吗?

相关内容

  • 没有找到相关文章

最新更新