Изображение PHP GD не отображается в Chrome

Мы использовали Captcha.php в одном из наших проектов, он открывается во всех браузерах, но мы не можем просматривать его в Google Chrome версии 22.

Наш скрипт Captcha

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. Все браузеры возвращают одно и то же изображение.


person Sam    schedule 27.10.2012    source источник
comment
Мы должны упомянуть Content-type ? Я не знаю ?   -  person Sam    schedule 27.10.2012
comment
Есть ли причина не использовать reCaptcha?   -  person Nasreddine    schedule 27.10.2012
comment
его нельзя настроить в соответствии с нашими потребностями?   -  person Sam    schedule 27.10.2012
comment
@Sam, что интересно, у меня это не работало в Chrome, пока я не обновил страницу. Я загрузил страницу и ничего не увидел, затем обновил, и после этого она работала каждый раз.   -  person Yes Barry    schedule 27.10.2012
comment
когда он будет онлайн, он конфликтует. наши пользователи не могут отправлять данные через формы.   -  person Sam    schedule 27.10.2012
comment
см. также stackoverflow.com/questions /13133752/   -  person Mawg says reinstate Monica    schedule 30.10.2012


Ответы (5)


Добавление

ob_clean();

решил для меня.

Полный пример:

$img = imagecreatefromjpeg('my_image.jpg');
ob_clean();
header('Content-Type: image/jpeg');
imagejpeg($img);
imagedestroy($img);
person rsc    schedule 31.01.2018

Я столкнулся с той же проблемой. Только что отключил касперского. Теперь он работает нормально. Вы также можете попробовать это.

person Roni    schedule 30.10.2012

Вы говорите, что Chrome продолжает отображать одно и то же изображение? попробуйте отправить заголовки, чтобы браузер ничего не кэшировал.

header('Pragma: no-cache');
header('cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jan 1999 00:00:00 GMT'); 
person Emissary    schedule 30.10.2012

Это может быть связано с кэшированием, я использовал этот скрипт:

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

Просто этой строки должно быть достаточно.

person uınbɐɥs    schedule 31.10.2012

Существует известная проблема, возникающая между Chrome и некоторыми версиями Kaspersky.

Его вызывает не Антивирус Касперского, а Kaspersky Endpoint Security.

По какой-то причине во время взаимодействия двух приложений при извлечении динамически созданных изображений из Интернета длина содержимого в заголовке становится больше на 1 байт.

Если вы измените значение длины содержимого в заголовке, оно будет работать в Chrome, но не работает в Firefox, IE и Opera, которые правильно следуют RFC.

Я не уверен, какое приложение на самом деле виновато, но это не то, что вы можете легко исправить самостоятельно.

person Dave    schedule 20.02.2013