Wednesday, March 28, 2012

problem of captcha

My captcha session working fine in local server but it is not working
in main server.


iam giving code of my model, controller,view..etc.... pls rectify
it:-

My code of captcha for controller is:-
<?php

class CaptchaController extends AppController{

public $uses = array('SessionManager','Validator','Captcha','Flash');
public $components=array('Session');

function init(){
$this->SessionManager->Session=$this->Session;
}
function index(){
$this->init();
/*
$text = $this->SessionManager->get('captchaText');
$height = 25;
$width = 65;

$image_p = imagecreate($width, $height);
$black = imagecolorallocate($image_p, 0, 0, 0);
$white = imagecolorallocate($image_p, 255, 255, 255);
$font_size = 14;
ob_start();
imagestring($image_p, $font_size, 5, 5, $text, $white);
imagejpeg($image_p, null, 80);
exit;*/

$urlRoot=Router::url('/',false);
$image_width = 120;
$image_height = 35;
$characters_on_image = 6;
$dir = Configure::read('FondDir');
$font = $dir.'/monofont.ttf';
$possible_letters = '23456789bcdfghjkmnpqrstvwxyz';
$random_dots = 0;
$random_lines = 20;
$captcha_text_color="0x142864";
$captcha_noice_color = "0x142864";
$code = '';
$i = 0;
ob_start();
while ($i < $characters_on_image) {
$code .= substr($possible_letters, mt_rand(0,
strlen($possible_letters)-1), 1);
$i++;
}
$this->SessionManager->set('captcha',$code);
$this->Session->write('captcha',$code);

$font_size = $image_height * 0.75;
$image = @imagecreate($image_width, $image_height);


/* setting the background, text and noise colours here */
$background_color = imagecolorallocate($image, 255, 255, 255);

$arr_text_color = $this->hexrgb($captcha_text_color);
$text_color = imagecolorallocate($image, $arr_text_color['red'],
$arr_text_color['green'], $arr_text_color['blue']);

$arr_noice_color = $this->hexrgb($captcha_noice_color);
$image_noise_color = imagecolorallocate($image,
$arr_noice_color['red'],
$arr_noice_color['green'], $arr_noice_color['blue']);


/* generating the dots randomly in background */
for( $i=0; $i<$random_dots; $i++ ) {
imagefilledellipse($image, mt_rand(0,$image_width),
mt_rand(0,$image_height), 2, 3, $image_noise_color);
}


/* generating lines randomly in background of image */
for( $i=0; $i<$random_lines; $i++ ) {
imageline($image, mt_rand(0,$image_width), mt_rand(0,$image_height),
mt_rand(0,$image_width), mt_rand(0,$image_height),
$image_noise_color);
}


/* create a text box and add 6 letters code in it */
$textbox = imagettfbbox($font_size, 0, $font, $code);
$x = ($image_width - $textbox[4])/2;
$y = ($image_height - $textbox[5])/2;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font ,
$code);


/* Show captcha image in the page html page */
header('Content-Type: image/jpeg');// defining the image type to be
shown in browser widow
imagejpeg($image);//showing the image
imagedestroy($image);//destroying the image instance


exit;
}

function hexrgb ($hexstr)
{
$int = hexdec($hexstr);

return array("red" => 0xFF & ($int >> 0x10),
"green" => 0xFF & ($int >> 0x8),
"blue" => 0xFF & $int);
}


}

?>


code for model is:-

<?php


class Captcha extends AppModel
{

private $captchaText;
private $canvasX;
private $canvasY;
private $fonts;
public $name='Captcha';
public $useTable = false;

function __construct($string,$width,$height)
{
$this->captchaText = $string;
$this->canvasX = $width;
$this->canvasY = $height;
putenv("GDFONTPATH=".dirname(dirname(__FILE__))."/webroot/fonts");
$this->fonts = array("Avgardn.ttf","frkgothi.ttf","lsansd.ttf");

}


function setText($string)
{
$this->captchaText = $string;
}
function getText()
{
return $this->captchaText;
}

function render()
{
$image = imagecreatetruecolor($this->canvasX,$this->canvasY);
$backGround = imagecolorallocate($image,255,255,255);
$borderColor =
imagecolorallocate($image,rand(125,250),rand(125,255),rand(0,125));
$textColor =
imagecolorallocate($image,rand(125,250),rand(0,255),rand(125,125));

$posY = ceil($this->canvasY/2);
$posX = ceil($this->canvasX/2);
$len = count($this->fonts);
$font = dirname(__FILE__)."/fonts/".$this->fonts[rand(0,$len-1)];
imagefilledrectangle($image,0,0,$this->canvasX,$this->canvasY,
$backGround);
//imagerectangle($image,5,5,$this->canvasX-5,$this-
>canvasY-5,$borderColor);
imagettftext($image,20,0,40,30,$textColor,$font,$this->captchaText);


ob_start();
header("Content-type:image/png");
imagepng($image);
ob_flush();

}

}


?>


and i called in view file like this:-

<tr>
<td><label>Captcha<em class="red">*</em></
label></td>
<td><img src="<?php echo $urlRoot;?>captcha/"
alt="Captcha Security Code" class="captcha" /></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>


but when form is submitte and i user to read value of session variable
like:-

echo $captcha = $this->SessionManager->get('captcha');

it is not getting.... pls rectify this

--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.


To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php

No comments: