CI框架教程之优化验证码机制详解_php实例_脚本之家,php生成验证码函数
分类:面向对象

php生成验证码的函数,实用靠谱。先上下生成的验证码的效果图(这里生成的是全数字的验证码的示例效果):

image.func.php

本文实例讲述了CI框架教程之优化验证码机制。分享给大家供大家参考,具体如下:

图片 1

<?php 
require_once('string.func.php');

 function verifyImage( $type=1,$length=4,$pixel=0,$line=0,$sess_name="verify"){ 

  session_start();
  /*定义长度和宽度*/
$width=80;
$height=30;
/* 创建画布*/
$image=imagecreatetruecolor($width, $height);

/*本函数用来匹配图形的颜色,供其它绘图函数使用。参数 image 表示图形的 handle。参数 red、green、blue 是色彩三原色,其值从 0 至 255....我在此定义黑色和白色*/
$white=imagecolorallocate($image, 255, 255, 255);
$black=imagecolorallocate($image,0,0,0);

/*本函数将图片的封闭长方形区域着色。参数 x1、y1 及 x2、y2 分别为矩形对角线的坐标。参数 col 表示欲涂上的颜色*/
imagefilledrectangle($image, 1, 1, $width-2, $height-2, $white);

/*buildRandomString函数用来生成一个验证码*/
$chars=buildRandomString($type,$length);

/*将验证码给session以便用来判断用户输入是否正确*/
$_SESSION[$sess_name]=$chars;

/*定义字体库*/
$fontfiles=array('msyh.ttf','msyhbd.ttf','simsun.ttc','SIMYOU.TTF','STHUPO.TTF','STKAITI.TTF','STLITI.TTF');


/*用循环来将验证码一个一个的写入图片中*/
for($i=0;$i<$length;$i++)
{
  $size=mt_rand(14,18);
  $angle=mt_rand(-15,15);

  /*验证码的横坐标与纵坐标*/
  $x=5+$i*$size;
  $y=mt_rand(20,26);

  $color=imagecolorallocate($image,mt_rand(50,190),mt_rand(50,200),mt_rand(50,90));
  $fontfile="../font/".$fontfiles[mt_rand(0,count($fontfiles)-1)];
  $text=substr($chars,$i,1);

  /*本函数将 TTF (TrueType Fonts) 字型文字写入图片*/
 imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);
}
if($pixel)
{
for($i=0;$i<50;$i++)
{
  /*本函数可在图片上绘出一点。参数 x、y 为欲绘点的坐标,参数 col 表示该点的颜色*/
  imagesetpixel($image, mt_rand(0,$width-1), mt_rand(0,$height-1), $black);
}}
if($line)
{
  for($i=0;$i<10;$i++)
  {
  $color=imagecolorallocate($image,mt_rand(50,90),mt_rand(50,200),mt_rand(50,90));
  /*画线段*/
  imageline($image, mt_rand(0,$width-1), mt_rand(0,$height-1), mt_rand(0,$width-1), mt_rand(0,$height-1), $color);
}
}
/*以gif形式输出*/
header("content-type:image/gif");
/*建立GIF图 并输出到网页*/
imagegif($image);
/*释放与 image 关联的内存*/
imagedestroy($image);
}

验证码机制在CI框架中是通过一个辅助函数captcha()进行实现的——验证码辅助函数文件包含了一些帮助你创建验证码图片的函数。。

那么我们如何使用CI的captcha()辅助函数来完成验证码功能呢?下面我会先讲述如何使用CI的captcha()辅助函数来完成验证码功能,然后在讲述如何具体的对CI框架的验证码机制进行优化。

下面是php生成验证码的源码:

string.func.php

1、CI框架验证码功能的使用

以上就是php如何生成验证码的实现函数,希望对大家的学习有所帮助。

<?php 

function buildRandomString($type=1,$length=4){

if($type==1)
{
  /*join函数把数组转换为字符串。。join() 函数是 implode() 函数的别名*/
  $chars=join("",range(0,9));
}elseif ($type==2) {
  /*array_merge函数合并数组*/
  $chars=join("",array_merge(range("a","z"),range("A","Z")));
}elseif($type==3)
{
  $chars=join("",array_merge(range("a","z"),range("A","Z"),range(0,9)));
}

if($length>strlen($chars))
{
  exit("字符串长度不够");
}
/*打乱字符串*/
$chars=str_shuffle($chars);
return substr($chars,0,$length);

}
 ?>

a) 首先我们要先加载辅助函数

您可能感兴趣的文章:

  • php图像验证码生成代码
  • PHP生成各种随机验证码的方法总结【附demo源码】
  • PHP封装函数实现生成随机的字符串验证码
  • PHP生成图片验证码功能示例
  • PHP生成图像验证码的方法小结(2种方法)
  • PHP生成制作验证码的简单实例
  • 最新最全PHP生成制作验证码代码详解(推荐)
  • 基于PHP生成简单的验证码
  • PHP生成可点击刷新的验证码简单示例
  • php生成酷炫的四个字符验证码
  • php生成图片验证码的方法
  • php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)

加载辅助函数一共有两种方法:

我们可以在根文件目录下的 “application/config/autoload.php” 文件中进行设置自动加载。

//ci框架设置自动加载辅助函数//captcha验证码复制函数$autoload['helper'] = array;

由于我们的项目使用验证码的地方非常有限,故而不推荐使用自动加载这种方法,我们可以在使用到的地方加载使用就可以了。

②、在使用到的地方进行加载

这种方法我们还是比较推荐的,消耗资源较少,效率会稍微的高一点。在你使用到验证码的控制器中写一个构造函数,在构造函数中进行验证码辅助函数加载就可以了。

//构造函数public function __construct(){ //切记在控制器的构造函数中一定先继承父类控制器的构造函数 parent::__construct();$this->load->helper;}

b) 然后使用验证码辅助函数创建验证码

$vals = array( 'word' => 'Random word', //验证码上显示的字符,可以写成函数,例如:rand 'img_path' => './data/captcha/', //验证码保存路径 'img_url' => base_url, //验证码图片url 'font_path' => './path/to/fonts/texb.ttf', //验证码上字体 'img_width' => '150', //验证码图片宽度 'img_height' => 30, //验证码图片高度 'expiration' => 7200, //验证码图片删除时间 'word_length' => 8, //验证码长度 'font_size' => 16, //验证码字体大小 'img_id' => 'Imageid', 'pool' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 'colors' => array( 'background' => array, 'border' => array, 'text' => array, 'grid' => array;$cap = create_captcha;

这样验证码就创建完成,img_path和img_url这俩个参数必须存在,并且,img_path所表示的路径文件夹必须存在,不然的话创建验证码不会成功。由于每创建一次验证码就会生成一张图片放到你设置的文件夹中,这样是非常消耗资源的,故此我们要对CI框架的验证码功能进行优化。

2、CI框架验证码的优化

优化思路:①、我们不让框架生成的图片进行保存到服务器中;②、我们只保留验证码的的内容即可。

要想对验证码功能进行优化,我们就要对验证码辅助函数功能进行扩展。

a) 扩展验证码辅助函数

首先将根目录下 “system/helpers/captcha_helper.php” 文件复制一份到根目录下 "application/helpers" 目录下,命名为 "MY_captcha_helper.php" ;

然后将下面代码注释掉;

if ($img_path === '' OR $img_url === '' OR ! is_dir OR ! is_really_writable OR ! extension_loaded{ return FALSE;}// -----------------------------------// Remove old images// -----------------------------------$now = microtime;$current_dir = @opendir;while ($filename = @readdir{ if  === '.jpg' && (str_replace('.jpg', '', $filename) + $expiration) < $now) { @unlink; }}@closedir;

此段代码防止你没有传递img_path和img_url参数以及参数所指的文件夹不存在就暂停执行函数。

$img_url = rtrim.'/';if (function_exists{ $img_filename = $now.'.jpg'; imagejpeg($im, $img_path.$img_filename);}elseif (function_exists{ $img_filename = $now.'.png'; imagepng($im, $img_path.$img_filename);}else{ return FALSE;}$img = '';

此段代码用于创建验证码图片,并且将图片保存到你说创建的验证码文件夹中。

最后,在create_captcha()函数的最后加上一个header头,最后代码如下:

//直接输出header("Content-Type:image/jpeg"); //加入图片格式header头imagejpeg;ImageDestroy;//返回生成的验证码字符串,如果需要其他参数的话也可以加入返回return $word;//return array('word' => $word, 'time' => $now, 'image' => $img, 'filename' => $img_filename);

b) 应用扩展优化之后的验证码功能

首先在控制器中写一个生成验证码方法;

然后在方法中进行调用验证码辅助函数,生成验证码;

最后在前台进行调用方法,并实现点击刷新功能。

//生成验证码public function code(){ //调用函数生成验证码,上述的参数也可以继续使用 $vals = array( 'word_length' => 6, ); create_captcha;}

前台调用饼实时刷新调用:

 "+Math.random() style="cursor: pointer;" title="看不清?点击更换另一个验证码。"/>

至此,CI框架的验证码功能机制优化我们就完成了。

更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

本文由10bet手机官网发布于面向对象,转载请注明出处:CI框架教程之优化验证码机制详解_php实例_脚本之家,php生成验证码函数

上一篇:代码调用方法与技巧集锦,函数实现个性化评论框 下一篇:JavaScript函数内部属性和函数方法实例详解,php根据日期或时间戳获取星座信息和生肖等信息
猜你喜欢
热门排行
精彩图文