CodeIgniter框架验证码类库文件与用法示例
本文实例讲述了CodeIgniter框架验证码类库文件与用法。分享给大家供大家参考,具体如下:
折腾了我四五个小时,终于,ci的验证码类库成功的整出来了。
下面请看源码:
在application/libraries建立Authcode.php文件,代码如下:
CI=&get_instance(); $this->fontPath=realpath(dirname(__FILE__).'/fonts/');//字体文件 //$this->arrChr=array_merge(range(1,9),range('A','Z'));//数字字母验证码 //$this->arrChr=range('A','Z');//纯字母验证码 $this->arrChr=range(0,9);//纯数字验证码 } /** *显示验证码 * */ functionshow() { $this->image=imageCreate($this->width,$this->height); $this->back=$this->getColor($this->bgcolor); imageFilledRectangle($this->image,0,0,$this->width,$this->height,$this->back); $size=$this->width/$this->charLen-4; if($size>$this->height){ $size=$this->height; } $left=($this->width-$this->charLen*($size+$size/10))/$size+5; $code=''; for($i=0;$i<$this->charLen;$i++){ $randKey=rand(0,count($this->arrChr)-1); $randText=$this->arrChr[$randKey]; $code.=$randText; $textColor=imageColorAllocate($this->image,rand(0,100),rand(0,100),rand(0,100)); $font=$this->fontPath.'/'.rand(1,5).".ttf"; $randsize=rand($size-$size/10,$size+$size/10); $location=$left+($i*$size+$size/10); @imagettftext($this->image,$randsize,rand(-18,18),$location,rand($size-$size/10,$size+$size/10)+2,$textColor,$font,$randText); } if($this->showNoisePix==true){ $this->setNoisePix(); } if($this->showNoiseLine==true){ $this->setNoiseLine(); } if($this->showBorder==true){ $this->borderColor=$this->getColor($this->borderColor); imageRectangle($this->image,0,0,$this->width-1,$this->height-1,$this->borderColor); } $this->CI->session->set_userdata('auth_code',$code); ob_clean(); header("Content-type:image/jpeg"); imagejpeg($this->image); imagedestroy($this->image); } /** *显示验证码的JS调用 * */ functionshowScript() { //显示验证码 echo"varimg_src='/imgauthcode/show/?';\n"; echo"document.writeln('');"; } /** *检查验证码是否正确 * *@paramstring$auth_code *@returnbool */ functioncheck($auth_code=null) { return($this->CI->session->userdata('auth_code')&&$auth_code)?($this->CI->session->userdata('auth_code')===$auth_code):false; } functiongetColor($color) { $color=eregi_replace("^#","",$color); $r=$color[0].$color[1]; $r=hexdec($r); $b=$color[2].$color[3]; $b=hexdec($b); $g=$color[4].$color[5]; $g=hexdec($g); $color=imagecolorallocate($this->image,$r,$b,$g); return$color; } functionsetNoisePix() { for($i=0;$i<$this->noiseNumPix;$i++){ $randColor=imageColorAllocate($this->image,rand(0,255),rand(0,255),rand(0,255)); imageSetPixel($this->image,rand(0,$this->width),rand(0,$this->height),$randColor); } } functionsetNoiseLine() { for($i=0;$i<$this->noiseNumLine;$i++){ $randColor=imageColorAllocate($this->image,rand(0,255),rand(0,255),rand(0,255)); imageline($this->image,rand(1,$this->width),rand(1,$this->height),rand(1,$this->width),rand(1,$this->height),$randColor); } } }
Authcode.php代码结束
在Controller中,有个admin类,其中有两个方法:
ClassAdminextendsCI_Controller{ function__construct() { parent::__construct(); $this->load->library('Authcode'); } functioncaptcha(){ if($_POST){ if($this->authcode->check($this->input->post('gd_pic'))){ echo"right"; }else{ echo'验证码不正确,请重新输入'; } }else{ $this->load->view('demo'); } } functionshow_captcha(){//此方法用于显示验证码图片,归一个view中的img的src调用 $this->authcode->show(); } }
下面是在视图view中创建一个demo.php了,代码如下:
">
OK.一切结束,终于正常运行了。
更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《ZendFrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。