验证码没有出现在php中

验证码没有出现在php中,php,captcha,Php,Captcha,我正在尝试创建一个captcha,它从我命名为dictionary.txt的文件中提取单词,并使用GD库将它们转换为captcha图像。但有点不对劲。我可以让字典中的短语显示为会话变量,但它们不会生成图像。所以它一定是GD库代码。有一个名为captcha_validate.php的最终目标文件,但现在这并不重要。我只是想让这个形象发挥作用 表单\u captcha.php <form class="" action="captcha_validate.php" method="post"&

我正在尝试创建一个captcha,它从我命名为dictionary.txt的文件中提取单词,并使用GD库将它们转换为captcha图像。但有点不对劲。我可以让字典中的短语显示为会话变量,但它们不会生成图像。所以它一定是GD库代码。有一个名为captcha_validate.php的最终目标文件,但现在这并不重要。我只是想让这个形象发挥作用

表单\u captcha.php

<form class="" action="captcha_validate.php" method="post">
    Captcha Verify:
    <input type="text" name="captcha" value="" /><br /><br />
    <img src="captcha.php" /><br />
    <input type="submit" name="submit" value="Submit" />
</form>
    <?php

    session_start();

    session_regenerate_id();

    $file = file('dictionary.txt', FILE_IGNORE_NEW_LINES);

    $length = count($file) - 1;
    $random = rand(0, $length);

    $_SESSION['captcha'] = $file[$random];
    session_write_close();

    function msg($msg) {
        $container = imagecreate(250, 170);
        $black = imagecolorallocate($container, 0, 0, 0);
        $white = imagecolorallocate($container, 255, 255, 255);
        $font = "C:\Windows\Fonts\arial.ttf";
        imagefilledrectangle($container, 0, 0, 250, 170, $black);

        $px = (imagesx($container) / (strlen($msg)/1.15));
        $py = (imagesy($container) / 3.5);

        imagefttext($container, 28, -27, $px, $py, $white, $font, $msg);
        header("Content-type: image/png");
        imagepng($container, null);
        imagedestroy($container);
    }

    msg($file[$random]);

     ?>

验证码验证:



captcha.php

<form class="" action="captcha_validate.php" method="post">
    Captcha Verify:
    <input type="text" name="captcha" value="" /><br /><br />
    <img src="captcha.php" /><br />
    <input type="submit" name="submit" value="Submit" />
</form>
    <?php

    session_start();

    session_regenerate_id();

    $file = file('dictionary.txt', FILE_IGNORE_NEW_LINES);

    $length = count($file) - 1;
    $random = rand(0, $length);

    $_SESSION['captcha'] = $file[$random];
    session_write_close();

    function msg($msg) {
        $container = imagecreate(250, 170);
        $black = imagecolorallocate($container, 0, 0, 0);
        $white = imagecolorallocate($container, 255, 255, 255);
        $font = "C:\Windows\Fonts\arial.ttf";
        imagefilledrectangle($container, 0, 0, 250, 170, $black);

        $px = (imagesx($container) / (strlen($msg)/1.15));
        $py = (imagesy($container) / 3.5);

        imagefttext($container, 28, -27, $px, $py, $white, $font, $msg);
        header("Content-type: image/png");
        imagepng($container, null);
        imagedestroy($container);
    }

    msg($file[$random]);

     ?>

尝试测试字体路径是否设置正确。我测试了yout脚本,当我为我的环境设置正确的字体路径时,它就工作了

比如:


$font='./SomeFont.ttf'

尝试测试字体路径是否设置正确。我测试了yout脚本,当我为我的环境设置正确的字体路径时,它就工作了

比如:


$font='./SomeFont.ttf'

好吧,原来我在captcha.php文件中使用了html,我不应该在这种情况下使用它。这就是我的代码不起作用的主要原因。感谢您的尝试,任何评论或回答的人。

好吧,原来我在captcha.php文件中使用了html,我不应该在这种情况下使用它。这就是我的代码不起作用的主要原因。感谢尝试,任何评论或回答的人。

Imagepng
手册页说,如果未使用质量和过滤器参数,则
NULL无效我这样做了,但仍然不起作用。imagepng($container,null,0,PNG\u NO\u FILTER)
Imagepng
手册页说,如果未使用quality和filters参数,则
NULL无效我这样做了,但仍然不起作用。imagepng($container,null,0,PNG\u NO\u FILTER);好的,结果是我在验证码文件中使用了html,我不应该在这种情况下使用它。好的,结果是我在验证码文件中使用了html,我不应该在这种情况下使用它。