一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

thinkphp验证码的实现示例

时间:2016-07-29 编辑:简简单单 来源:一聚教程网

验证码参数

可以对生成的验证码设置相关的参数,以达到不同的显示效果。 这些参数包括:

参数 描述
expire 验证码的有效期(秒)
useImgBg 是否使用背景图片 默认为false
fontSize 验证码字体大小(像素) 默认为25
useCurve 是否使用混淆曲线 默认为true
useNoise 是否添加杂点 默认为true
imageW 验证码宽度 设置为0为自动计算
imageH 验证码高度 设置为0为自动计算
length 验证码位数
fontttf 指定验证码字体 默认为随机获取
useZh 是否使用中文验证码
bg 验证码背景颜色 rgb数组设置,例如 array(243, 251, 254)
seKey 验证码的加密密钥
codeSet 验证码字符集合 3.2.1 新增
zhSet 验证码字符集合(中文) 3.2.1 新增


两种验证码验证实现,一种直接在form表单提交按钮实现验证,一种使用ajax传递参数实现验证:

1、直接在form表单提交按钮实现验证,在控制器VerifyController.class.php中写入如下代码:

 代码如下 复制代码


namespace Home\Controller;
use Think\Controller;
class VerifyController extends Controller {
    public function index() {
        $this->display();
    }
    public function checkLogin() {
        $verify=new \Think\Verify();
        $code=I('post.verify');//表单验证码
        if($verify->check($code)){
            $this->success('验证码正确');
        }else{
            $this->error('验证码错误');
        }
    }
    public function verify()
    {
        // 实例化Verify对象
        $verify = new \Think\Verify();

        // 配置验证码参数
        $verify->fontSize = 14;     // 验证码字体大小
        $verify->length = 4;        // 验证码位数
        $verify->imageH = 34;       // 验证码高度
        $verify->useImgBg = true;   // 开启验证码背景
        $verify->useNoise = false;  // 关闭验证码干扰杂点
        $verify->entry();
    }
}

在视图Verify/index.html中的代码如下:

 代码如下 复制代码




   
       
       
   
   
       


           

               
               
                验证码
           

               

                   
               

       

   

2、使用ajax传递参数实现验证,在控制器VerifyController.class.php中的代码如下:

 代码如下 复制代码


namespace Home\Controller;
use Think\Controller;
class VerifyController extends Controller {
    public function index() {
        $this->display();
    }
    public function checkLogin() {
        $verify=new \Think\Verify();
        $code=$_POST['code'];//ajax验证码获取
        if($verify->check($code)){
            $this->ajaxReturn(1);
        }else{
            $this->ajaxReturn(0);
        }
    }
    public function verify()
    {
        // 实例化Verify对象
        $verify = new \Think\Verify();

        // 配置验证码参数
        $verify->fontSize = 14;     // 验证码字体大小
        $verify->length = 4;        // 验证码位数
        $verify->imageH = 34;       // 验证码高度
        $verify->useImgBg = true;   // 开启验证码背景
        $verify->useNoise = false;  // 关闭验证码干扰杂点
        $verify->entry();
    }
}

视图Verify/index.html中的代码如下:

 代码如下 复制代码




   
       
       
       
   
   
       


           

               
               
                验证码
           

               

                   
               

       

       
   

在配置文件Common/conf/config.php中配置地址:

 代码如下 复制代码

return array( 
    /*地址替换*/
    'TMPL_PARSE_STRING'=>array( 
        '__JS__'=>__ROOT__.'/Public/JS',
    ),
);

thinkphp验证码出错无法显示的方法 可以参考:http://www.111com.net/phper/thinkPhp/51991.htm

官方提示如下:

如果无法显示验证码,请检查:
① PHP是否已经安装GD库支持;
② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出);
③ Image类库是否正确导入;
④ 如果是中文验证码检查是否有拷贝字体文件到类库所在目录;

但是测试半天,不行!网上找来一个能用的方法,放到一个文件里执行可用,进入到tp里面通过index.php入口进去就是小 x,然后能用的方法所在文件把编码改为utf-8 含有bom的编码也会出现小 X,其他编码都会出来验证码,初步判断是tp执行到输出验证码的前面有内容输出,主管想到了清除之前的输出就行.

类似:

 代码如下 复制代码

ob_start();//不加这个是不行的(貌似不加可以) 
echo "不要显示"; 
ob_end_clean(); 
echo "只要显示这"; 
?>

解决方法,修改生成验证码方法:

//生成验证码 
public function verifyimg(){ 
import("ORG.Util.Image"); 
ob_end_clean(); 
Image::buildImageVerify(); 
}

热门栏目