验证码参数
可以对生成的验证码设置相关的参数,以达到不同的显示效果。 这些参数包括:
参数 |
描述 |
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();
}
|