Ненормальная проблема с Zend_Form_Element_Captcha ...? - PullRequest
3 голосов
/ 04 февраля 2012

В моем приложении Zend я столкнулся с ненормальной проблемой с элементом Captcha.Когда я пытаюсь просмотреть форму, в которой я использовал этот элемент Captcha на моей локальной машине, он работает нормально, но когда я загружаю его на свой сервер Debian, он не работает должным образом ... !!!

Разница заключается в следующем: enter image description here

Как вы можете видеть на локальном хосте, текст внутри капчи показан пользователю, где, как и на сервере [Debian], текст отсутствует !!!!!

Я использовал следующий код для создания элемента Captcha в своей Zend-форме:

    $elements = array();
    $captchaElement = new Zend_Form_Element_Captcha('captcha',
                                                array('label'   => "Ihr generierter Textcode:",
                                                      'captcha' => array('captcha' => 'Image',
                                                      'name'    => 'myCaptcha',
                                                      'wordLen' => 5,
                                                      'timeout' => 300,
                                                      'font'    => 'verdana.ttf',
                                                      'imgDir'  => 'captcha/',
                                                      'imgUrl'  => '/captcha/')
                                                     )
                                                 );
    $elements[] = $captchaElement;
    foreach ($elements as $index => $element)
    {
        $element->setAttrib('tabindex', ($index + 1));
    }

Может кто-нибудь сказать мне, какую ошибку я делаю ...?

Спасибо вАвансовый .....

Ответы [ 2 ]

4 голосов
/ 25 февраля 2012
  1. Измените этот шрифт на любой другой, чтобы проверить, поддерживает ли его Debian
  2. Установить абсолютно путь к шрифту и изображениям:

    $captchaOptions = array(
        'label' => "Enter key",
        'captcha' => array(
            'captcha'   => 'Image',
            'wordLen'   => 4,
            'width'     => 197,
            'timeout'   => 120,
            'expiration'=> 300,
            'font'      => APPLICATION_PATH . '/../public/ttf/arial.ttf',
            'imgDir'    => APPLICATION_PATH . '/../public/images/captcha',
            'imgUrl'    => '/images/captcha/',
            'gcFreq'    => 5
        ),
    );
    
  3. Какую версию ZF вы используете? Потому что после 1.7 есть ошибка в декораторе, вы должны установить собственный декоратор, иначе Zend_Captcha не будет работать:

    $captcha = new Zend_Form_Element_Captcha('Captcha', $captchaOptions);
    $captchaDecor = array_merge(array(new Decorator_Captcha()), $captcha->getDecorators());
    $captcha->setDecorators($captchaDecor);
    

Файл Decorator_Captcha ниже

class Decorator_Captcha extends Zend_Form_Decorator_Abstract
{
    /**
     * Render captcha
     *
     * @param  string $content
     * @return string
     */
    public function render($content)
    {
        $element = $this->getElement();
        if (!method_exists($element, 'getCaptcha')) {
            return $content;
        }

        $view    = $element->getView();
        if (null === $view) {
            return $content;
        }

        $placement = $this->getPlacement();
        $separator = $this->getSeparator();

        $captcha = $element->getCaptcha();
        $markup  = $captcha->render($view, $element);
        switch ($placement) {
            case 'PREPEND':
                $content = $content . $separator . $markup;
                break;
            case 'APPEND':
            default:
                $content = $markup . $separator .  $content;
        }

        return $content;
    }
}
0 голосов
/ 26 февраля 2012

Как уже упоминалось в комментариях RockyFord, это не ошибка ZF, а ошибка PHP.

Вы найдете решения в уже предоставленных ответах: Zend captcha Изображение генерирует пустое значение

...