Analysis on CodeIgniter framework verification code library files and usage

不言
Release: 2023-04-01 07:36:01
Original
1733 people have browsed it

This article mainly introduces the CodeIgniter framework verification code class library file and usage. It analyzes the definition and specific usage of the CodeIgniter framework verification code class library file in the form of examples. It has certain reference value. Friends in need can refer to it.

The examples in this article describe the CodeIgniter framework verification code library files and usage. I would like to share it with you for your reference. The details are as follows:

After struggling with it for four or five hours, finally, the CI verification code library was successfully completed.

Please see the source code below:

Create the Authcode.php file in application/libraries, the code is as follows:

<?php
class Authcode
{
 var $CI;
 var $fontPath;//字体路径
 var $image;
 var $charLen   = 4; //生成几位验证码
 var $arrChr   = array();//验证码字符
 var $width    = 83; //图片宽
 var $height   = 24; //图片高
 var $bgcolor   = "#ffffff"; //背景色
 var $showNoisePix  = true; //生成杂点
 var $noiseNumPix  = 80; //生成杂点数量
 var $showNoiseLine  = true; //生成杂线
 var $noiseNumLine  = 2; //生成杂线数量
 var $showBorder  = true; //边框,当杂点、线一起作用的时候,边框容易受干扰
 var $borderColor  = "#000000";
 function Authcode()
 {
  $this->CI = & get_instance();
  $this->fontPath = realpath(dirname(__FILE__) . &#39;/fonts/&#39;); //字体文件
  //$this->arrChr   = array_merge(range(1, 9) , range(&#39;A&#39;, &#39;Z&#39;));//数字字母验证码
  //$this->arrChr   = range(&#39;A&#39;, &#39;Z&#39;);//纯字母验证码
  $this->arrChr = range(0, 9);//纯数字验证码
 }
 /**
  * 显示验证码
  *
  */
 function show()
 {
  $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 = &#39;&#39;;
  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 . &#39;/&#39; . 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(&#39;auth_code&#39;, $code);
  ob_clean();
  header("Content-type: image/jpeg");
  imagejpeg($this->image);
  imagedestroy($this->image);
 }
 /**
  * 显示验证码的JS调用
  *
  */
 function showScript()
 {
  //显示验证码
  echo "var img_src = &#39;/imgauthcode/show/?&#39;;\n";
  echo "document.writeln(&#39;<img id=\"img_authcode\" src=\"&#39; + img_src + Math.random() + &#39;\" style=\"cursor:hand;\" onclick=\"this.src=img_src + Math.random();\" alt=\"点击更换图片\">&#39;);";
 }
 /**
  * 检查验证码是否正确
  *
  * @param string $auth_code
  * @return bool
  */
 function check($auth_code = null)
 {
  return ($this->CI->session->userdata(&#39;auth_code&#39;) && $auth_code) ? ($this->CI->session->userdata(&#39;auth_code&#39;) === $auth_code) : false;
 }
 function getColor($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;
 }
 function setNoisePix()
 {
  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);
  }
 }
 function setNoiseLine()
 {
  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);
  }
 }
}
Copy after login

Authcode End of .php code

In Controller, there is an admin class, which has two methods:

Class Admin extends CI_Controller{
 function __construct()
 {
  parent::__construct();
  $this->load->library(&#39;Authcode&#39;);
 }
function captcha(){
  if($_POST){
    if ($this->authcode->check($this->input->post(&#39;gd_pic&#39;))) {
    echo "right";
   } else {
    echo &#39;验证码不正确,请重新输入&#39;;
   }
  }else{
   $this->load->view(&#39;demo&#39;);
  }
 }
 function show_captcha(){ //此方法用于显示验证码图片,归一个view中的img的src调用
  $this->authcode->show();
 }
}
Copy after login

The following is in the view view Create a demo.php with the following code:

<?php echo form_open(&#39;c=admin&m=captcha&#39;);?>
<input type="text" name="gd_pic" />
<img src="<?php echo base_url(&#39;?c=admin&m=show_captcha&#39;);?>" ><br>
<input type="submit" name="submit" value="验证" />
<?php echo form_close();?>
Copy after login

OK. Everything is over and it finally runs normally.

The above is the entire content of this article. I hope it will be helpful to everyone’s study. For more related content, please pay attention to the PHP Chinese website!

Related recommendations:

About form validation analysis of CI framework

How to solve 404 errors in Nginx and CI framework

The above is the detailed content of Analysis on CodeIgniter framework verification code library files and usage. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!