zoukankan      html  css  js  c++  java
  • 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() ,就会导致验证码出现小八叉,一般无法输出图片多半是因为这个原因。

  • 相关阅读:
    Session的使用与Session的生命周期
    Long-Polling, Websockets, SSE(Server-Sent Event), WebRTC 之间的区别与使用
    十九、详述 IntelliJ IDEA 之 添加 jar 包
    十八、IntelliJ IDEA 常用快捷键 之 Windows 版
    十七、IntelliJ IDEA 中的 Maven 项目初体验及搭建 Spring MVC 框架
    十六、详述 IntelliJ IDEA 创建 Maven 项目及设置 java 源目录的方法
    十五、详述 IntelliJ IDEA 插件的安装及使用方法
    十四、详述 IntelliJ IDEA 提交代码前的 Code Analysis 机制
    十三、IntelliJ IDEA 中的版本控制介绍(下)
    十二、IntelliJ IDEA 中的版本控制介绍(中)
  • 原文地址:https://www.cnblogs.com/iuyes/p/3062707.html
Copyright © 2011-2022 走看看