2012-02-04 28 views
3

在我的Zend應用程序中,我面臨Captcha元素的異常問題。當我嘗試查看我在本地機器上使用此驗證碼元素的表單時,它工作正常,但是當我將其上傳到我的Debian服務器時,它無法正常工作...... !!!Zend_Form_Element_Captcha的異常問題...?

差別如下: enter image description here

正如你可以在本地主機驗證碼內的文本看到的是顯示給用戶,如果作爲服務器[Debian的]時,文本丟失!!!!!

我用了followig代碼到我的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

你在生產服務器上的字體? – bububaba 2012-02-04 11:48:05

+0

@bububaba:是的,我在服務器上有verdana.ttf字體,但我不確定它是否被Debian支持。 – PhpStudent 2012-02-04 12:31:55

+4

與http://stackoverflow.com/q/7001725/1145086相同,這在Linux的某些版本的PHP中很常見。應該在當前版本中修復,但您的主機可能尚未升級。 – RockyFord 2012-02-04 14:14:45

回答

4
  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裝飾中的一個bug,你必須設定自己的裝飾,否則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; 
    } 
}