【问题标题】:Simple Captcha picture not showing简单的验证码图片不显示
【发布时间】:2018-03-14 22:07:52
【问题描述】:

我试图通过以下网站创建一个简单的 PHP 验证码:

http://php.detailsinn.com/create-captcha-in-your-php-application/

我完全按照教程所教的内容进行操作,但最终验证码图像仍然没有显示。

我检查了 php 错误日志文件并使用 error_reporting 检查错误是什么,但没有显示错误。这是脚本需要一些帮助。

myform.php

<?php session_start(); 
error_reporting(E_ALL);

    if(isset($_POST['txtName'])){
        $error = '';
        if(isset($_POST['txtCaptcha']) and $_POST['txtCaptcha'] !=''){
            if($_SESSION['captcha_text'] == $_POST['txtCaptcha']){
                // Action of form...
                echo $_POST['txtName'].' is successfully processed';
                exit;
            }else{
                $error = '<font color="red">Sorry Incorrect captcha entered...</font>';
            }
        }else{
            $error = '<font color="red">You have not entered captcha.</font>';
        }
    }
?>
<html>
<head><title>Captcha</title></head>
<body>
    <?php if(isset($error)){ echo $error; } ?>
<form action="myform.php" method="post">
    <input type="text" name="txtName" value="" placeholder="Enter your name" />
    <br /><br />
    <img src="captcha.php" />&nbsp;&nbsp;&nbsp;<input type="text" name="txtCaptcha" value="" placeholder="Enter the number you see in the image" />
    <br /><br/>
    <input type="submit" value="Submit Data" />
</form>
</body>
</html>

captcha.php

<?php 
error_reporting(E_ALL);

    // Generate Random Number
    $random_number =  rand(1,9).rand(1,9).rand(1,9);
    $_SESSION['captcha_text'] = $random_number;

    // Insert random number into image
    $captcha_image = imagecreatefromjpeg("captcha.jpg");
    $font_color = imagecolorallocate($captcha_image, 0, 0, 0);
    imagestring($captcha_image, 5, 20, 5, $random_number, $font_color);
    imagejpeg($captcha_image);
    imagedestroy($captcha_image);

?>

【问题讨论】:

    标签: php captcha


    【解决方案1】:

    当我们动态绘制图像时,我们必须告诉浏览器我们发送给它的内容,在你的情况下

    header ("Content-type: image/jpeg");
    

    变成:

    ....
    header ("Content-type: image/jpeg");
    imagejpeg($captcha_image);
    imagedestroy($captcha_image);
    

    你也可以验证状态

    /* Attempt to open */
    $captcha_image = imagecreatefromjpeg("captcha.jpg");
    
    /* See if it ok */
    if($captcha_image)
    {
    
    }else{
         // failed to open
    
        $captcha_image  = imagecreatetruecolor(150, 30);
    }
    

    【讨论】:

    • 感谢您的回复,我测试了您列出的方式以验证...无法加载验证码.jpg。但我不知道为什么加载失败,它们都在同一个文件中
    • @JakeCube: GD 安装了吗? var_dump(get_extension_funcs("gd"))
    • 我确定是否安装了 GD,我使用的是 XAMPP 7.0.23。我用 var_dump 进行了测试,它在数组中显示了 101 个单元。
    • @JakeCube: 可能有权限问题,你仍然可以在不使用 imagecreatefromjpeg 的情况下创建验证码,$captcha_image = imagecreatetruecolor(150, 30);,这里是tutorial,看我的编辑
    • 用“imagecreatetruecolor”测试,加载图片失败后没有任何显示。去研究你给brb的网址
    猜你喜欢
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多