目前这个学习文档的次序有点乱,我也是看哪个简单就先写哪个,正确的应该是介绍文档,然后介绍文档的目录结构,然后,各个组件有个简介,再跟下来来个 HelloWorld ,然后单独介绍组件,然后进阶使用等等,这么个次序才是正确的,不过最近比较忙,最后写完会重新整理出一个次序来的。
Captcha 就是 LotusPhp 验证码的组件,一般来说,比较规范的 LotusPhp 组件都会由3个部分组成,就是分别是配置文件,框架源码和应用源码,框架源码的话自己下就行了,我这里不占地方贴代码了,这里就是写出配置文件和应用范例,能快速看懂会用为原则。
Captcha 组件可以快速生成验证码,这个验证码不借助于 Session 验证,而是在指定文件夹里生成一个经过加密的验证文件,读取的验证码的时候会主动拉取验证文件,读取成功就删除了验证文件,读取不成功返回 false。
Captcha 组件有3个方法
init() 是初始化验证码组件的方法。
getImageResource($seed) 是生成验证码的方法,会读取默认的配置文件,然后根据传入的 $seed 生成验证码图像,该变量不可以是常量,建议可以使用md5(uniqid())得到随机不冲突的$seed
verify($seed, $userInput) 是验证验证码是否正确的方法,两个参数分别是随验证码一起发送到客户端的$seed,一个是用户输入的数据,如果用户输入的值等于 Captcha 缓存中值就代表验证成功。
配置文件名为:captcha.conf.php
先来看配置文件:
<?php
// 允许输出的字符,去除了0,1,o,l这样容易混淆的字符,增加可辨识性
$config['captcha.allow_chars'] = "23456789abcdeghkmnpqsuvxyz";
// 验证码长度
$config['captcha.length'] = 4;
// 图片生成类的类名,如果你有更喜欢的图片生成风格或者类,可以放到 captcha 目录下,然后更改下面的值为该图片生成类的类名
$config['captcha.image_engine'] = 'LtCaptchaImageEngine';
/*
* 这里的配置内容主要是设置验证码图片的一些基本参数
* blur 模糊效果,开启后图像处理速度会变慢
* scale 图像质量,1代表低质量图像,2代表中等质量图像,3代表高质量图像
* width 验证码宽
* height 验证码高
* max_rotation 设置字符顺时针旋转的倾斜度,为增加机器破译的难度的
*/ $config['captcha.image_engine_conf'] = array('blur' => false,'scale' => 2,'width' => 200,'height' => 80,'max_rotation' => 4);
下面的是输出验证码的视图范例:
{$this->data['seed']} 这一句是 LotusPhp 的视图语法,代表输出 data['seed'] 变量,可以对照以后的 MVC 章节
<html> <head> <meta charset="utf-8"> <title>Captcha LotusPHP</title> </head> <body> <form action='simplest.php' method='post'> <img src="captcha_image.php?seed={$this->data['seed']}"/> <input type='hidden' name='seed' value="{$this->data['seed']}" /> <br /> 请输入上图中的验证码:<input type='text' name='captcha_word' /> <input type='submit' /> </form> </body> </html>
这个是 captcha_image.php 文件代码:
$captcha = new LtCaptcha; $captcha->init(); $seed = md5(uniqid()); $imageResource=$captcha->getImageResource($_GET["seed"]); header("Content-type: image/png"); imagepng($imageResource);
验证文件 simplest.php 代码:
$captcha = new LtCaptcha; $captcha->init(); if ($captcha->verify($_POST["seed"], $_POST["captcha_word"])) { // 验证码正确,这里是处理代码 } else { // 验证码错误,这里是处理代码 }
大功告成,Captcha 就介绍完了,来,我们来秀一下验证码
最后说一下常见的错误:
header("Content-type: image/png");
这一句以前不能有任何的输出,很多人在头部加上 ob_start() ,就会导致验证码出现小八叉,一般无法输出图片多半是因为这个原因。