ThinkPHP简单的验证码实现
ThinkPHP简单的验证码实现
写一个最简单的TP验证码。
-
写Controller
首先在Controller/IndexController.class.php(简称Index)文件中编辑:
1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 use Think\Verify;//这个类一定记得引用 5 class IndexController extends Controller { 6 public function index(){ 7 $this->redirect('login');//重定向至login方法 8 } 9 10 /*验证码*/ 11 public function verify(){ 12 $verify=new Verify();//新建一个验证码 13 $verify->entry();//输出验证码 14 } 15 16 /*登陆*/ 17 public function login(){ 18 $this->display();//调用对应模板中的login.html 19 } 20 21 /*登陆验证*/ 22 public function login_do(){ 23 $code=I('code'); 24 $verify=new Verify(); 25 if($verify->check($code)){ 26 $this->success("验证成功"); 27 }else{ 28 $this->error("验证码错误"); 29 } 30 } 31 }
-
写html
接下来要去新建一个表单,用于显示验证码并提供一个输入框,输入验证。
如果表单先不新建,现在就去看验证码的效果也是可以的。在浏览器访问:
http://localhost:8088/TP/Home/Index/verif就可以了。
上面操作是在Controller文件夹里面的index控制器进行的。我们去同级文件夹View里面新建一个文件夹叫做index进入index新建login.html
该html文件的命名与控制器文件中的login方法一直,在方法调用
$this->display();//调用对应模板中的login.html
即可显示login.html
文件中添加如下表单。
<form action="__URL__/login_do" method="post"> <input type="text" placeholder="请输入验证码" name="code" required> <img src="{:U('verify')}" alt="" onclick="this.src='{:U('verify')}?'+Math.random()" title="看不清换一张"> <button>登陆</button> </form>
-
访问测试
访问http://localhost:8088/TP/Home/Index/login即可看到如下效果。
这个验证码是默认的,以上编写显示过程也是相对比较简单的。
-
验证码图形自定义
我们接下来可以在此基础之上自定义一下。
修改控制器文件:
1 /*验证码*/ 2 public function verify(){ 3 $config=array( 4 'expire'=> 60, //验证码的有效期(秒) 5 'useImgBg'=>false , //是否使用背景图片 默认为false 6 'fontSize'=>35 , //验证码字体大小(像素) 默认为25 7 'useCurve'=>true , //是否使用混淆曲线 默认为true 8 'useNoise'=>true , //是否添加杂点 默认为true 9 //'imageW'=>100 , //验证码宽度 设置为0为自动计算 10 //'imageH'=>30 , //验证码高度 设置为0为自动计算 11 'length'=>4 , //验证码位数 12 //'fontttf'=> , //指定验证码字体 默认为随机获取 13 //'useZh'=> , //是否使用中文验证码 14 //'bg'=> , //验证码背景颜色 rgb数组设置,例如 array(243, 251, 254) 15 //'seKey'=> , //验证码的加密密钥 16 //'codeSet'=> , //验证码字符集合 3.2.1 新增 17 //'zhSet'=> , //验证码字符集合(中文) 3.2.1 新增 18 ); 19 20 $verify=new Verify($config);//新建一个验证码 21 $verify->entry();//输出验证码 22 }
这样则可以自定义验证码。