View Single Post
  #2 (permalink)  
Old 04-22-2008, 07:59 PM
intregus intregus is offline
Junior Member
 
Join Date: Feb 2008
Posts: 17
Default

Here's my working code:

Code:
<?php
class CaptchaController extends Zend_Controller_Action {

	function init() {
		$this->_helper->viewRenderer->setNoRender();
		$this->_helper->viewRenderer->setNoController();
	}

	public function pngAction() {
		//Let’s generate a totally random string using md5
        $md5_hash = md5(rand(0,999));
        //We don’t need a 32 character long string so we trim it down to 5
        $security_code = substr($md5_hash, 15, 5);

        //$_SESSION[‘captcha_code’] = $security_code;

        //Set the image width and height
        $width = 200;
        $height = 40; 

        //Create the image resource
        $image = ImageCreate($width, $height);  

        //We are making three colors, white, black and gray
        $white = ImageColorAllocate($image, 255, 255, 255);
        $black = ImageColorAllocate($image, 0, 0, 0);
        $grey = ImageColorAllocate($image, 204, 204, 204);

        //Make the background black
        ImageFill($image, 0, 0, $black); 

        //Add randomly generated string in white to the image
        ImageString($image, 3, 30, 3, $security_code, $white); 

        //Throw in some lines to make it a little bit harder for any bots to break
        ImageRectangle($image,0,0,$width-1,$height-1,$grey);
        imageline($image, 0, $height/2, $width, $height/2, $grey);
        imageline($image, $width/2, 0, $width/2, $height, $grey); 

        //Tell the browser what kind of file is come in
        header("Content-Type: image/png"); 

        //Output the newly created image
        imagepng($image);
	}
}
?>
I still need to do some work on the captcha itself, and use Zend_Session, but this should be a good starting point for somebody.

Then I just implemented the image as a CSS background-image as an easy work around Zend_Form. Checking the input against the session variable created by the captcha script would be an easy validator to add also.

Hope this helps
Reply With Quote