thinkphp框架中为我们提供了用于生成验证码的类:Verify.class.php,其具体的位置是:ThinkPHP/Library/Think/Verify.class.php。因此,为了在项目中使用验证码,我们需要在控制器中定义一个调用验证码的方法verifyImg,然后在HTML中需要用到验证码的地方调用此方法。具体的实现代码如下所示:
1、在控制器中定义个verifyImg方法
function verifyImg(){ $config=array( 'imageH' => 25, 'imageW' => 90, 'fontSize'=>12, 'fontttf' =>'4.ttf', 'length' => 4, ); $verify=new \Think\Verify($config); $verify->entry(); $this->display(); }在上面的代码中我们将一个config数组传入了命名空间中,在参数中我们可以设置验证码的高度、宽度、个数、字体大小等等,更具体的可以参考Verify类的定义。
2、在HTML中需要验证码的地方调用上面的verifyImg方法。我们通常是在<img>的src中调用该方法
<lable>验证码:</lable>
<input type="text" id="verify" class="verify"/> <img src="{:U('Home/Blog/verifyImg')}" id="verifyImg" style="margin-left: 5px;vertical-align: bottom"><!--此处用于显示验证码--> <a href="javascript:void(0)" id="refresh_verify" style="text-decoration: underline">看不清</a><!--当验证码显示不清晰时,点击可以刷新验证码-->3、刷新验证码
//刷新验证码 $('#refresh_verify').click(function(){ //var time=new Date().getTime(); var verifyimg=$('#refresh_verify').attr("src"); //'/ThinkPHP01/index.php?s=Home/User/verifyImg/' //$('#verifyImg').attr("src",'/ThinkPHP01/index.php?s=Home/Blog/verifyImg/'+time);<span style="font-family: Arial, Helvetica, sans-serif;">//不加时间也可以</span> $('#verifyImg').attr("src",'/ThinkPHP01/index.php?s=Home/User/verifyImg/'); })在javascript中实现验证码的刷新
javascript部分:
$('#certain_info').click(function(){ var verify_info=$('#verify').val(); var verify_check_sign=""; $.ajax({ url: '/ThinkPHP01/index.php?s=Home/Blog/blog/verify_info/' + verify_info,//提交访问的URL,地址后缀不要加html type: 'GET',//提交的方法 dataType: 'text',//返回的内容的类型,由于PHP文件是直接echo的,那么这里就是text timeout: 1000,//超时时间 async: false,//若设置为true,则无法为全局变量赋值,谨记 error: function () { //如果出错,执行函数 alert('网络繁忙,请稍后再试!'); }, success:function(data) { var str=eval("("+data+")");//返回的数据是json类型 var comment=str.verify_check;//获取php返回的数据 if(comment==1){ verify_check_sign=1; } else if(comment==0){ verify_check_sign=0; } } }); if(verify_check_sign==0){ $('#prompt_verify').html("*验证码不正确!"); } });php部分:
if(IS_AJAX){ //接收验证码并且进行验证 $verify_info=$_GET['verify_info']; $verify_check=0; if(!$verify->check($verify_info)){ $verify_check=0; } else{ $verify_check=1; } $this->ajaxReturn(array( 'verify_check'=>$verify_check )); }效果图: