Изображението на 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)


Добавяне на a

ob_clean();

решен за мен.

Пълен пример:

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

+1 Декларирането на вашите променливи винаги е добро. Ако обаче не ги декларирате, добавете към тях подходящ идентификатор като $, & и т.н., така че да не се приемат като вариант. напр. abc$ е низ, xyz& ще бъде дълго и т.н.
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 Anti-Virus не го причинява, но Kaspersky Endpoint Security го причинява.

По някаква причина, по време на взаимодействието на двете приложения при извличане на динамично създадени изображения от мрежата, дължината на съдържанието в заглавката става с 1 байт.

Ако промените стойността на Content Length в заглавката, тя ще работи в Chrome, но ще се провали във Firefox, IE и Opera, които всички следват правилно RFC.

Не съм сигурен кое приложение всъщност е погрешно, но това не е нещо, което можете лесно да поправите сами.

person Dave    schedule 20.02.2013