4

我们在我们的一个项目中使用了 Captcha.php,它在所有浏览器中打开,但我们无法在 Google chrome 版本 22 中查看。

我们的验证码脚本

session_start();
$captcha = new SimpleCaptcha();
$captcha->CreateImage();

class SimpleCaptcha 
{
    function CreateImage()
    {
        header("Content-Type: image/jpeg");

        $md5              = md5(rand(0,9999));
        $pass             = substr($md5, 10, 5);
        $_SESSION["pass"] = $pass;

        $image     = ImageCreatetruecolor(100, 20);
        $clr_white = ImageColorAllocate($image, 0, 0, 0);
        $clr_black = ImageColorAllocate($image, 255, 255, 255);

        imagefill($image, 0, 0, $clr_white);
        imagefontheight(15);
        imagefontwidth(15);
        imagestring($image, 5, 30, 3, $pass, $clr_black);

        return imagejpeg($image);
        imagedestroy($image);
    }
}

HTML 实现

<img src="code/captcha.php" width="100" height="20" alt="Captcha Code"/>

我们无法在 Google Chrome 上查看它。所有浏览器都返回相同的图像。

4

5 回答 5

1

添加一个

ob_clean();

为我解决了。

完整示例:

$img = imagecreatefromjpeg('my_image.jpg');
ob_clean();
header('Content-Type: image/jpeg');
imagejpeg($img);
imagedestroy($img);
于 2018-01-31T06:50:08.893 回答
0

我遇到了同样的问题。刚关掉我的卡巴斯基。现在工作正常。你也可以试试这个。

于 2012-10-30T07:15:52.060 回答
0

Chrome 和某些版本的卡巴斯基之间存在一个已知问题。

Kaspersky Anti-Virus 不会导致它,但 Kaspersky Endpoint Security 会。

出于某种原因,在两个应用程序的交互过程中,当从 Web 检索动态创建的图像时,标头中的 Content Length 变为了 1 个字节。

如果您修改标头中的 Content Length 值,它将在 Chrome 中运行,但在 Firefox、IE 和 Opera 中失败,它们都正确遵循 RFC。

我不确定哪个应用程序实际上有问题,但这不是您可以轻松解决的问题。

于 2013-02-20T13:50:21.143 回答
0

你说 Chrome 一直在渲染相同的图像?尝试发送标头告诉浏览器不要缓存任何内容。

header('Pragma: no-cache');
header('cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jan 1999 00:00:00 GMT'); 
于 2012-10-30T08:05:48.077 回答
0

这可能与缓存有关,我使用了我的脚本:

header('Cache-Control: no-cache, must-revalidate');

就这一行就足够了。

于 2012-10-31T07:42:06.943 回答