【问题标题】:captcha image not shown in browser验证码图像未在浏览器中显示
【发布时间】: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>

【问题讨论】:

    标签: php image captcha


    【解决方案1】:

    当您访问 imageurl 时会得到什么?那时您可能会看到错误(我在代码中可以看到,当您尝试运行此代码时,可能在环境中没有 GD php 扩展)。 您也可以尝试将图片网址更改为$_SERVER['PHP_SELF'] . '?captcha=1'

    【讨论】:

    • 你对 img url 正确,它只显示这个错误 img...试图从图片中更改 url,但它仍然是同样的错误
    • 你的 php 中安装了 GD 库吗?
    • 如果我没有 GD 扩展并且我使用表达式,代码中会不会有错误?
    【解决方案2】:

    你的$font = './captcha.ttf'; 放对了吗?

    【讨论】:

    • 我认为这会很有意义..你会把它放在哪里?
    • 你为什么要在答案部分问清楚?你有足够的代表发表评论
    【解决方案3】:

    解决错误:

    • session_start();上方的脚本顶部添加error_reporting(E_ALL); ini_set('display_errors', 'On');
    • 暂时注释掉header("Content-type: image/png");,这样浏览器就不会将其强制为图像并阻止视图源工作
    • 直接导航到 script.php?captcha=1 并查看显示的错误消息。

    您很可能缺少 GD 或 FreeType,或者服务器上的会话配置中断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-15
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 2022-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多