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程序设计有所帮助。