Zend 기반 Captcha 메커니즘 의 응용
환경 설 치 는 우선 Zend 의 Captcha 에 GD 를 설치 해 야 합 니 다.GD 가 설치 되 어 있 는 지 확인 하려 면 phpinfo()에서 GD 모듈 이 있 는 지 확인 해 야 합 니 다.(php-m 에 있 는 모듈 에 gd 가 있 을 수 있 지만 phpInfo()에 있 는 모듈 에 gd 가 없습니다.이 문 제 는 PHP 와 Apache 가 설치 되 어 있 지 않다 는 것 입 니 다.구 글
(gd 를 설치 하 는 과정 에서 Missing Dependency:libt 1.so.5 모듈 오 류 를 알 리 면 이 글 을 보십시오.http://www.siutung.org/post/730/)
인증번호 이미지 생 성 Zend 사용Captcha_Image 클래스
$captcha = new Zend_Captcha_Image(); 
$captcha->setWordLen('4') 
    ->setHeight('60') 
    ->setFont(NCHANNEL_FONT_DIR . '/arial.ttf') 
    ->setImgDir(NCHANNEL_CAPTCHA_DIR) 
    ->setDotNoiseLevel('5') 
    ->setLineNoiseLevel('5'); 
$id = $captcha->generate(); 
$code = $captcha->getWord(); 
그림 파일 이름 이$id 입 니 다.".png";이 id 는 난수 입 니 다.
$code 는 이 그림 의 문자 입 니 다.인증 코드 의 답 입 니 다.
2 setWordLen 등 설 치 된 인 터 페 이 스 는 ZendCaptcha_Image 가 외부 에 노출 된 인증 코드 그림 설정사실 함수 명 을 보면 무엇 을 하 는 지 알 수 있 습 니 다.구체 적 으로 젠 드 의 에이 피 매 뉴 얼 을 참고 하 세 요.
3 font 글꼴 파일 은 서버 에 있어 야 합 니 다.ImgDir 는 그림 생 성 경 로 를 설정 합 니 다.
인증 코드 그림 이 되 었 습 니 다.인증 코드 그림 이 생 성 되 었 습 니 다.이제 인증 코드 를 검증 해 야 합 니 다.
검증 절 차 는 ZendSession_Namespace 이 session 저장 모듈.
우선,인증 코드 를 생 성 할 때 id 와 code 두 변수 가 저장 되 어야 합 니 다.좋 습 니 다.이전 단계 로 돌아 가 코드 를 수정 하 겠 습 니 다
$captcha = new Zend_Captcha_Image(); 
$captcha->setWordLen('4') 
    ->setHeight('60') 
    ->setFont(NCHANNEL_FONT_DIR . '/arial.ttf') 
    ->setImgDir(NCHANNEL_CAPTCHA_DIR) 
    ->setDotNoiseLevel('5') 
    ->setLineNoiseLevel('5'); 
$id = $captcha->generate(); 
$codeSession = new Zend_Session_Namespace('captcha_code_' . $id); 
$codeSession->code = $captcha->getWord();
두 번 째 단 계 는 페이지 에 폼 을 전달 할 때$id 와 인증 코드 그림 을 전달 합 니 다.
사용자 에 게 인증 번 호 를 기입 하 게 하 다.
세 번 째 단계,검증.이 단 계 를 검증 하려 면 사용자 가 두 개의 인 자 를 제공 해 야 합 니 다:$id 와 인증 코드 의 답$code
$codeSession = new Zend_Session_Namespace('captcha_code_' . $this->_params['id']); 
if ($codeSession == null || strtolower($codeSession->code) != strtolower($this->_params['code'])) { 
    $this->Output(ERROR); 
} 
이렇게 되면 인증 코드 검증 과정 이 끝난다.
깊이 생각해 보 니 그 실험 증 번 호 는 이렇게 간단 하지 않다.아래 에 고려 할 만 한 몇 가지 문제 가 있다.
인증 코드 그림 은 자동 으로 삭제 되 지 않 기 때문에 생 성 된 인증 코드 그림 이 있 는 폴 더 의 부피 가 계속 증가 합 니 다.어 떡 하지?Image 클래스 에 서 는 방법 을 제공 하 는$captcha->setGcFreq(5)입 니 다.
구체 적 인 사용법 은 API 를 보 세 요.
$id 를 설정 하고 싶 습 니 다.어떻게 하 죠?정 답 은 ZendCaptche_이미지 에 한 층 더 밀봉 한 다음 generate()방법 을 다시 씁 니 다.
예 를 들 어 저 는 클래스 를 다시 썼 습 니 다.
class Test_Captcha_Image extends Zend_Captcha_Image 
{ 
    protected $_fid = ""; 
    public function generate() 
    { 
        $word = $this->_generateWord(); 
        $this->_setWord($word); 
        if ($this->_fid) { 
            $id = $this->_fid; 
        } 
        $this->_generateImage($id, $this->getWord()); 
        if (mt_rand(1, $this->getGcFreq()) == 1) { 
            $this->_gc(); 
        } 
        return $id; 
    } 
    public function setId($id) { 
        $this->_fid = $id; 
        return $this; 
    } 
}
그러면 이 종류의 코드 를 사용 하 는 것 은 이 렇 습 니 다
$captcha = new Test_Captcha_Image(); 
$captcha->setWordLen('4') 
    ->setHeight('60') 
    ->setFont(NCHANNEL_FONT_DIR . '/arial.ttf') 
    ->setImgDir(NCHANNEL_CAPTCHA_DIR) 
    ->setDotNoiseLevel('5') 
    ->setLineNoiseLevel('5') 
    ->setId($user_id); 
$id = $captcha->generate(); 
$codeSession = new Zend_Session_Namespace('captcha_code_' . $user_id); 
$codeSession->code = $captcha->getWord(); 
--------------   
//   session 
$codeSession = new Zend_Session_Namespace('captcha_code_' . $this->_params['user_id']); 
if ($codeSession == null || strtolower($codeSession->code) != strtolower($this->_params['code'])) { 
    $this->Output(ERROR); 
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Zend_ControllerZend_Controller_Front 는 플러그 인 에이전트 (plugin broker) 를 스스로 등록 하여 플러그 인 이 촉발 하 는 각종 사건 을 관찰 할 수 있 도록 합 니 다.대부분의 경우 개발 자 들 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.