Captcha Plugin in CodeIgniter
CAPTCHA – Completely Automated Public Turing test to tell Computers and Humans Apart. It is used in webpages to protect your page from automatic posting from outside of the site. CodeIgniter framework has a plugin named “captcha_pi.php” in plugins folder. Here I’ve demonstrated an example how to use this captcha plugin in your website built in CodeIgniter framework.
Make a controller named "captcha.php" and place in “controllers” folder. This controller is as follows:
<?php class Captcha extends Controller { public function __construct() { parent::Controller(); $this->load->model('captcha_model'); session_start(); } public function index() { if(empty($_POST)) { $captcha = $this->captcha_model->generateCaptcha(); $_SESSION['captchaWord'] = $captcha['word']; $data['captcha'] = $captcha; $this->load->view('show_view', $data); } else { //check captcha matches if(strcasecmp($_SESSION['captchaWord'], $_POST['confirmCaptcha']) == 0) { $this->load->view('success_view'); } else { $this->load->view('failure_view'); } } } } ?>
Here I’ve made a model named "captcha_model" that has a method generateCaptcha(), which generates the captcha using CodeIgniter captcha plugin and returns the array. Captcha word is saved in session and after submitting the form this session word is compared with the posted word for matching.
If matches which is in (strcasecmp($_SESSION['captchaWord'], $_POST['confirmCaptcha']) == 0), then success is shown. Otherwise failure is shown. Here I’ve used strcasecmp() function of php to compare the word as case-insensitively. If u want user to enter the captcha words as they are shown (i.e. capital letter in capital and small letter in small), then you can use strcmp() function.
The captcha_model.php is as follows:
<?php class Captcha_model extends Model { private $vals = array(); private $baseUrl = 'http://localhost/captchademo/'; private $basePath = 'D:/apache2triad/htdocs/captchademo/'; private $captchaImagePath = 'tmp/captcha/'; private $captchaImageUrl = 'tmp/captcha/'; private $captchaFontPath = 'c:/windows/fonts/verdana.ttf'; public function __construct($configVal = array()) { parent::Model(); $this->load->plugin('captcha'); if(!empty($config)) $this->initialize($configVal); else $this->vals = array( 'word' => '', 'word_length' => 6, 'img_path' => $this->basePath . $this->captchaImagePath, 'img_url' => $this->baseUrl . $this->captchaImageUrl, 'font_path' => $this->captchaFontPath, 'img_width' => '150', 'img_height' => 50, 'expiration' => 3600 ); } /** * initializes the variables * * @author Mohammad Jahedur Rahman * @access public * @param array config */ public function initialize ($configVal = array()) { $this->vals = $configVal; } //end function initialize //--------------------------------------------------------------- /** * generate the captcha * * @author Mohammad Jahedur Rahman * @access public * @return array */ public function generateCaptcha () { $cap = create_captcha($this->vals); return $cap; } //end function generateCaptcha } ?>
You have to change the $baseUrl, $basePath, $captchaImagePath, $captchaImageUrl and $captchaFontPath etc. To store the captcha images at first I’ve created a folder “tmp” and sub-folder “captcha” in the main directory where index.php exists. If u run on server be sure this two folder are given write permission.
By default, Captcha plugin generates 8 words in length. But I desire to very this length. So, I’ve made a little change in this plugin. In line 156 of "captcha_pi.php" there was
$defaults = array('word' => '', 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200);
which I made
$defaults = array('word' => '', 'word_length' => 8, 'img_path' => '', 'img_url' => '', 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200);
Next, in line 226, there was
for ($i = 0; $i < 8; $i++)
which I made
for ($i = 0; $i < $word_length; $i++)
Now if u pass word_length as parameter then it will generate captcha image of word length as you specify.
You can download the whole package from here.
Tags: captcha, CodeIgniter, PHP, plugin, tutorial






May 23rd, 2008 at 2:23 pm
Tim Ramsey
May 23rd, 2008 at 10:29 pm
July 29th, 2008 at 11:28 am
July 29th, 2008 at 12:18 pm
Thanks for your suggestion. Soon, I will include captcha in my blog.
October 18th, 2008 at 1:27 am
October 20th, 2008 at 7:31 pm
But 1 question:
How can I change the background color/image for this captcha?
October 31st, 2008 at 5:23 pm
October 31st, 2008 at 5:30 pm
January 27th, 2009 at 8:01 am
@Anuj, you just need to check the captcha_pi plugin and change the variables for assigning colors to suit.
May 4th, 2009 at 8:06 am
I try to find this tutorial today…. hahahahaha
thank’s alot… it’s really helpfull
May 28th, 2009 at 10:14 am
May 30th, 2009 at 4:53 pm
please anyone help me out
June 26th, 2009 at 3:38 pm
July 16th, 2009 at 4:09 pm
July 28th, 2009 at 11:13 pm
August 26th, 2009 at 12:44 pm
exactly what I was looking for. Bookmarked it. nice blog
October 2nd, 2009 at 5:44 pm
January 23rd, 2010 at 2:17 am
January 23rd, 2010 at 10:57 am
February 4th, 2010 at 2:52 am
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: captcha
Filename: views/listings_showlisting_view.php
Line Number: 238
Any suggestions?
February 4th, 2010 at 11:46 am
February 8th, 2010 at 10:50 pm
My company hosts several sites and I am trying to implement this one just one of them. If the URL for the site (for example) is http://www.google.com would that be both my $baseUrl and $basePath?
Thank you for your help so far.
February 8th, 2010 at 10:51 pm
My company hosts several sites and I am trying to implement this one just one of them. If the URL for the site (for example) is http://www.google.com would that be both my $baseUrl and $basePath?
Thank you for your help so far!
February 8th, 2010 at 11:03 pm
May 3rd, 2010 at 2:30 pm
hi guysI would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well and i have start my own blog now, , thanks for your effort…
August 5th, 2010 at 4:10 pm
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: captcha
Filename: views/account_trainer_profile_edit.php
Line Number: 148
Any suggestions?
August 21st, 2010 at 7:39 pm