1. 前言
把模板引擎换成smarty后,yii框架自带的captcha,非常不友好,使用起来不方便。干脆自己封装一个php图片验证码模块,想要移植到其他框架,简单修改即可。
2. 设计思路
PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中。PHP生成验证码的大致流程有:
1、产生一张png的图片;
2、为图片设置背景色;
3、设置字体颜色和样式;
4、产生N位数的随机的验证码;
5、把产生的每个字符调整旋转角度和位置画到png图片上;
6、加入噪点和干扰线防止注册机器分析原图片来恶意破解验证码;
7、输出图片;
8、释放图片所占内存。
3. 项目结构
1、《yii框架实战》的基础上,在controllers目录中新建util目录,util目录中新建CaptchaController.php,用来实现验证码模块。
2、在web中新建font目录,font目录中放入微软雅黑字体msyh.ttf,用来显示验证码上的字体。
4. 代码实现
1 |
|
5. 使用
5.1. 接口
获取验证码接口:http://localhost/basic/web/util/captcha/getcode
验证验证码接口:http://localhost/basic/web/util/captcha/check?code=f7nh
5.2. 显示
在smarty渲染的页面中,直接使用验证码接口即可显示图片。
1 | <p><img id="captcha" src="http://localhost/basic/web/util/captcha/getcode" alt=""></p> |
5.3. 刷新
如果要刷新验证码,在js中重置src地址即可。
1 | $('#captcha').click(function(){ |
5.4. 验证
1 | $('#check').click(function(){ |
5.5. 效果演示
6. 源码分享
1、下载安装:git clone https://github.com/voidking/yii-basic.git basic
2、利用navicat等工具连接到本地mysql数据库,创建数据库basic,在数据库中创建表bas_project(int id, varchar title, varchar content)。注意,编码格式选择utf8。
3、验证码测试页url:
http://localhost/basic/web/util/captcha/index