> > > Zend Framework 15: Tạo captcha trong Zend

Zend Framework 15: Tạo captcha trong Zend

Captcha là chuỗi bao gồm cả chữ và số. Những chữ và số này có thể bị biến dạng để chỉ có con người mới đọc được.

Bán tài liệu zend tiếng việt: 500.000 vnđ (500 k)

Hotline: 0933.381.903
Yahoo: Mua bán online
Email: songthan.hctm@gmail.com

Do đó, nó nhận biết được đâu là người và đâu là chương trình máy tính nhằm ngăn chặn một số chương trình tự động đăng ký tài khoản, đoán password, spam diễn đàn... Qua bài viết này, mình sẽ hướng dẫn mọi người tạo một captcha dạng hình ảnh trong zend framework.
1/ Tạo form để nhập captcha:
Với captcha dạng hình ảnh, ta tạo thêm folder chứa hình ảnh /zfcaptcha/public/img/captcha và folder chứa font chữ phù hợp /zfcatcha/public/fonts/ten_font.ttf
Tạo form CaptchaImg.php trong /zfcaptcha/application/forms:

PHP Code:
<?php
class Form_CaptchaImg extends Zend_Form{
    public function 
init(){
        
$this->setAction('')->setMethod('post');
        
//Tạo captcha dạng hình ảnh, gồm 6 ký tự và có thời gian tồn tại là 300 giây
        
$captcha = new Zend_Form_Element_Captcha('captcha',array(
                            
'label' => 'Captcha',
                             
'captcha' => array(
                                    
'captcha' => 'Image',
                                    
'wordLen' => 6,
                                    
'timeout' => 300,
                                    
'font' => APPLICATION_PATH.'/../public/fonts/tunga.ttf',
                                    
'imgDir' => APPLICATION_PATH.'/../public/img/captcha/',
                                    
'imgUrl' => '/zfcaptcha/public/img/captcha/',
                                    
'height' => 100,
                                    
'width' => 200,
                                    
'fontSize' => 50,
                                ),
        ));
        
$submit $this->createElement('submit','Submit');
        
        
$this->addElement($captcha)
            ->
addElement($submit);
    }
}

Cần lưu ý khai báo đường dẫn đến font, folder chứa hình ảnh captcha và imgUrl phải chính xác.
Zend sẽ khởi tạo một captcha ID và chuỗi captcha . Chuỗi captcha này sẽ được lưu vào session với namespace là Zend_Form_Captcha_captchaID. Và do zend sử dụng session để lưu trữ nên trong file bootstrap.php ta thêm đoạn code sau:

PHP Code:
protected function _initSession(){
    
Zend_Session::start();

2/ Tạo một class để kiểm tra chuỗi nhập có hợp lệ không:
Tạo file Captcha.php trong /zfcaptcha/application/forms/Validated/Captcha.php:

PHP Code:
<?php
class Form_Validate_Captcha{
    static function 
isValid($captcha){
        
$capId $captcha['id'];
        
$capInput $captcha['input'];
        
$capSession = new Zend_Session_Namespace('Zend_Form_Captcha_'.$capId);
        
$capWord $capSession->getIterator();
        if(isset(
$capWord['word']) && $capWord['word'] == $capInput){
            return 
TRUE;
        }else{
            return 
FALSE;
        }
    }
}

3/ Xử lý trong controller và view:
Tạo /zfcaptcha/application/controllers/CaptchaController.php:
 

PHP Code:
<?php
class CaptchaController extends Zend_Controller_Action{
    public function 
imageAction(){
        
$form = new Form_CaptchaImg;
        if(
$this->_request->isPost()){
            
$captcha $this->_request->getPost('captcha');
            if(
Form_Validate_Captcha::isValid($captcha)){
                echo 
"Success";
            }else{
                echo 
"You're not human";
            }
        }
        
$this->view->form $form;        
        
//Đoạn code sau để xóa hình ảnh captcha sau khi xuất ra form
        
$mask APPLICATION_PATH."/../public/img/captcha/*.png";
        
array_map("unlink",glob($mask));
}

Tạo file view /zfcaptcha/application/views/script/captcha/image.phtml:

PHP Code:
<?php
echo $this->form;
?>

4/ Truy cập localhost/zfcaptcha/captcha/image để xem kết quả ^^

Source mẫu zfcaptcha.rar

Bán tài liệu zend tiếng việt: 500.000 vnđ (500 k)

Hotline: 0933.381.903
Yahoo: Mua bán online
Email: songthan.hctm@gmail.com