Zend Captcha Изображение генерирует пустое - PullRequest
0 голосов
/ 09 августа 2011

На картинке капча случайным образом отображается пустая капча.Примерно 4 из 10 попыток.

Я уже обнаружил проблему, и сообщение на форуме Zend предлагает Единственное исправление - это редактирование кода Zend Framework.

Есть ли способ исправить это без редактирования кода ZF?Почему Zend не исправил это в выпусках с тех пор, я смотрю в журнале изменений, но ничего с этим не связано?

$w     = $this->getWidth();
$h     = $this->getHeight();
$fsize = $this->getFontSize();

$img_file   = $this->getImgDir() . $id . $this->getSuffix();
if(empty($this->_startImage)) {
    $img = imagecreatetruecolor($w, $h);
} else {
    $img = imagecreatefrompng($this->_startImage);
    if(!$img) {
        require_once 'Zend/Captcha/Exception.php';
        throw new Zend_Captcha_Exception("Can not load start image");
    }
    $w = imagesx($img);
    $h = imagesy($img);
}
$text_color = imagecolorallocate($img, 0, 0, 0);
$bg_color   = imagecolorallocate($img, 255, 255, 255);
imagefilledrectangle($img, 0, 0, $w-1, $h-1, $bg_color);
$textbox = imageftbbox($fsize, 0, $font, $word);
$x = ($w - ($textbox[2] - $textbox[0])) / 2;
$y = ($h - ($textbox[7] - $textbox[1])) / 2;

// Edit: check not over 100
if($x > 50){ $x = 50;}
if($y > 100){ $y = 100;}

imagefttext($img, $fsize, 0, $x, $y, $text_color, $font, $word);

Отладка с помощью die () доказывает, что это так:

die("img=".$img ." fsize=".$fsize. " x=".$x ." y=".$y . " h=".$h );
img=Resource id #159 fsize=24 x=1073741923.5 y=41 h=50

Ответы [ 2 ]

0 голосов
/ 04 февраля 2012

Вы случайно запускаете php 5.3.2 в Debian / Ubuntu? В PHP (не Zend) была ошибка imageftbbox , которая иногда приводила к аномальным значениям.

Я думаю, что это связано с компиляцией определенной версии GD с использованием 32-битного gcc. Я видел это большое количество раз с изображениями с картинки. Простое решение - обновить PHP до последней версии, или я думаю, что это было исправлено в следующей версии PHP.

0 голосов
/ 09 августа 2011

Согласно предоставленной ссылке, это может быть не ошибка Zend Framework, а что-то с imageftbbox.Я бы предложил расширить Zend_Captcha_Image и скопировать функцию _generateImage и установить $x = во что-то разумное (я видел 45 в сообщении на форуме), когда оно слишком большое (возможно,> 100).Это позволяет добавить предложенное исправление / хак без изменения действующего кода Zend Framework.

...