MiniFramework新增了图片验证码输出和校验功能

今天为 MiniFramework 新增了一个名为 Captcha 的类,用于图片验证码的输出和校验。

具体用法如下:

用 MiniFramework 新建一个名为 Example 的控制器,例如:

<?php
namespace App\Controller;

use Mini\Action;
use Mini\Captcha;

/**
 * Example
 */
class Example extends Action
{
    function captchaAction()
    {
        if (!empty($_POST['code'])) {
            $captcha = new Captcha();
            $res = $captcha->check($_POST['code']);
            if ($res) {
                $this->view->assign('info', 'success');
            } else {
                $this->view->assign('info', 'fail');
            }
            $this->view->assign('code', $_POST['code']);
        }
        
        $this->view->display();
    }
    
    function getcaptchaAction()
    {
        $captcha = new Captcha();
        $captcha->create();
    }
}

 

同时创建视图,代码如下:

<?php if (isset($this->code)) echo '<p>input code: ' . $this->code . '</p>';?>
<?php if (isset($this->info)) echo '<p>check result: ' . $this->info . '</p>';?>
<img src="getcaptcha" onclick="this.src='getcaptcha?t='+Math.random()" />
<form method="post" action="captcha">
  <p>code:<input type="text" name="code" value="" />
  <input type="submit" value="check" /></p>
</form>

 

创建完成后,访问 http://你的域名/example/captcha 即可看到效果。

上边的代码已经包含在 MiniFramework 位于 GitHub 的 master 主线上。

GitHub源代码地址:https://github.com/jasonweicn/MiniFramework

用PHP实现验证码功能

先看看调用方法:

<img id="vcodeimages" src="vcodeimages.php"
 onclick="this.src='vcodeimages.php?t='+Math.random()"
 style="cursor:pointer;" alt="点击刷新验证码" />

 

上面的代码中,img标签的src指向了一个名为vcodeimages.php的文件,这个文件就是负责实现生成验证码图片的PHP程序,下面我们看看vcodeimages.php文件的代码,也是验证码的实现方法:

<?php
session_start();
header("Content-type: image/png");
$VerifyCode     = "";
$im             = ImageCreate(50, 20); //开始创建图形
$color_bg       = ImageColorAllocate($im, 255, 255, 255); //定义背景颜色
$color_font     = ImageColorAllocate($im, 0, 0, 0); //定义文字颜色
$color_pixel    = ImageColorAllocate($im, 0, 0, 0); //定义干扰像素颜色
for($i=0; $i<4; $i++) { //加入随机数
    $RandNum = strval(mt_rand("1", "9"));
    $VerifyCode .= $RandNum;
    ImageString($im, 5, ($i * 11) + 4, 2, $RandNum, $color_font);
}
for($i=0; $i<200; $i++) { //加入干扰象素
    ImageSetPixel($im, rand() % 70, rand() % 30, $color_pixel);
}
$_SESSION["VerifyCode"] = $VerifyCode; //将验证码存入Session
ImagePNG($im); //以PNG格式建立图形
ImageDestroy($im); //结束创建图形
?>

 

阳光部落原创,更多内容请访问 http://www.sunbloger.com/