2012-12-05 7 views
0

captcha 구성 요소를 사용하고 있습니다.cakephp captca 유효성 확인

<?php 

function create($width='120',$height='40',$characters='6') { 

    $code = $this->generateCode($characters); 

    /* font size will be 75% of the image height */ 
    $font_size = $height * 0.70; 

    $image = @imagecreate($width, $height) or die('Cannot initialize new GD image stream'); 

    /* set the colours */ 
    $background_color = imagecolorallocate($image, 220, 220, 220);    
    $text_color  = imagecolorallocate($image, 10, 30, 80); 
    $noise_color  = imagecolorallocate($image, 150, 180, 220); 

    /* generate random dots in background */ 
    for($i=0; $i<($width*$height)/3; $i++) { 
     imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color); 
    } 

    /* generate random lines in background */ 
    for($i=0; $i<($width*$height)/150; $i++) { 
     imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color); 
    } 

    /* create textbox and add text */ 
    $textbox = imagettfbbox($font_size, 0, dirname(__FILE__).'/'.$this->font, $code) or die('Error in imagettfbbox function'); 
    $x  = ($width - $textbox[4])/2; 
    $y  = ($height - $textbox[5])/2; 
    $y  -= 5; 
    imagettftext($image, $font_size, 0, $x, $y, $text_color, dirname(__FILE__).'/'.$this->font , $code) or die('Error in imagettftext function'); 

    /* output captcha image to browser */ 
    header('Content-Type: image/jpeg'); 
    imagejpeg($image); 
    imagedestroy($image); 

    $this->Controller->Session->write('security_code',$code); 
} 

captca가 성공적으로 만들어,하지만 난 그것을 확인하려고 할 때 $code이 세션에 저장되지 않기 때문에 나는 오류가 발생했습니다. 나는 이것이 왜 일어나고 있는지 이해하지 못한다.

+0

그게 전부 위치를 변경하여 해당 제거. 스크립트가 작동하는 동안에는 헤더 등을 보내면 안됩니다. 그래서 2.x에서 헤더를 수동으로 보내지 말고 응답 클래스가 응답하게하십시오. – mark

답변

0

변경이에

$this->Controller->Session->write('security_code', $code); 

는 :

또한
$this->Session->write('security_code', $code); 

, 당신이 당신의 $ 헬퍼 배열에 SessionHelper를 추가 한 것을 확인합니다.

0

CakePHP 1.x를 사용하는 경우 이미지를 생성하기 위해 header() 함수를 호출하기 전에 응용 프로그램이 브라우저에 출력을 보내는 것 같습니다. 이 경우 세션 생성 라인을 헤더 ('Content-Type : image/jpeg') 이상으로 이동해야합니다.는 느낌을 찾으려면 다음

imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function'); 
/* output captcha image to browser */ 
$this->Controller->Session->write('security_code',$code); 
@ob_end_clean(); //clean buffers, as a fix for 'headers already sent errors..' 
header('Content-Type: image/jpeg'); 
imagejpeg($image); 
imagedestroy($image); 

당신이 저자의 웹 사이트에서 보안 문자 구성 요소의 CakePHP의 2.x를 다운로드 업데이트 된 버전을 사용하는 경우 www.devarticles.in/cakephp/simple-captcha-component-for-cakephp/

0

나는 몇 가지 문제에 직면하고 여기 세션 저장 라인의 정말 좋은 코드를

function create($width='120',$height='40',$characters='6') { 

    $code = $this->generateCode($characters); 
    $this->Controller->Session->write('security_code',$code); 

    //.....rest of code will remain same 
}