LotusPhp学习五:Captcha 组件的使用

目前这个学习文档的次序有点乱,我也是看哪个简单就先写哪个,正确的应该是介绍文档,然后介绍文档的目录结构,然后,各个组件有个简介,再跟下来来个 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() ,就会导致验证码出现小八叉,一般无法输出图片多半是因为这个原因。

原文地址:https://www.cnblogs.com/iuyes/p/3062707.html