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

  • 相关阅读:
    css 中 overflow: hidden清楚浮动的真正原因
    Get、Post请求中文乱码问题有效解决方法
    安装PostgreSQL和卸载PostgreSQL
    PostgresSql日期字段比较大小
    关于多线程编程的一点思考
    Python 虚拟环境 pyenv、venv(pyvenv)、virtualenv之间的区别
    python常用命令
    python中各种文件打开模式a w r
    python-安装
    day1-安装配置
  • 原文地址:https://www.cnblogs.com/iuyes/p/3062707.html
Copyright © 2020-2023  润新知