詳解ThinkPHP框架之驗證碼

下面由thinkphp教程欄目給大家介紹thinkphp框架之驗證碼 ,希望對需要的朋友有所幫助!

ThinkVerify類可以支持驗證碼的生成和驗證功能。

下面是最簡單的方式生成驗證碼:

$Verify = new ThinkVerify();$Verify->entry();

上面的代碼會生成默認的驗證碼圖片并輸出,顯示如下:

詳解ThinkPHP框架之驗證碼

立即學習PHP免費學習筆記(深入)”;

生成的驗證碼信息會保存到Session中,包含的數據有:

Array('verify_code'=>'當前驗證碼的值','verify_time'=>'驗證碼生成的時間戳')

如果你需要在一個頁面中生成多個驗證碼的話,entry方法需要傳入可標識的信息。

驗證碼參數

可以對生成的驗證碼設置相關的參數,以達到不同的顯示效果。這些參數包括:

參數 描述
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 新增

默認參數配置:

詳解ThinkPHP框架之驗證碼

參數設置使用兩種方式。

實例化傳入參數:

詳解ThinkPHP框架之驗證碼

或者采用動態設置的方式,如:

詳解ThinkPHP框架之驗證碼

驗證碼字體

默認情況下,驗證碼的字體是隨機使用?ThinkPHP/Library/Think/Verify/ttfs/目錄下面的字體文件,我們可以指定驗證碼的字體,例如:

$Verify = new ThinkVerify();// 驗證碼字體使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf$Verify->fontttf = '5.ttf';$Verify->entry();

背景圖片

支持驗證碼背景圖片功能,可以如下設置:

$Verify = new ThinkVerify();// 開啟驗證碼背景圖片功能 隨機使用 ThinkPHP/Library/Think/Verify/bgs 目錄下面的圖片$Verify->useImgBg = true;$Verify->entry();

中文驗證碼

如果要使用中文驗證碼,可以設置:

$Verify = new ThinkVerify();// 驗證碼字體使用 ThinkPHP/Library/Think/Verify/zhttfs/simhei.ttf$Verify->useZh = true;$Verify->entry();

顯示效果如圖:

詳解ThinkPHP框架之驗證碼

如果無法正常顯示,請確認你的 ThinkPHP/Library/Think/Verify/zhttfs/ 目錄下面存在中文字體文件。

若ThinkPHP/Library/Think/Verify/zhttfs/里面沒有中文字體文件,可以下載或者從C:windowsFonts里面找到中文字體文件復制過來,注意字體文件擴展名為.ttf。

驗證碼檢測

可以用ThinkVerify類的check方法檢測驗證碼的輸入是否正確,例如,下面是封裝的一個驗證碼檢測的函數:

// 檢測輸入的驗證碼是否正確,$code為用戶輸入的驗證碼字符串function check_verify($code, $id = ''){$verify = new ThinkVerify();return $verify->check($code, $id); }

練習:以登錄為例:

控制器方法:

<?php namespace HomeController;use ThinkController;class LoginController extends Controller {    function Login()     {        if(empty($_POST))         {            $this->display();             }             else         {            $code = $_POST["yzm"];             $verify = new ThinkVerify();           if($verify->check($code,2)) //code是用戶輸入的值 ,2是驗證碼檢測標示,必須與生成的驗證碼標示相同才能驗證            {                if($_POST["uid"]!="" && $_POST["pwd"]!="")                 {                    $model = D("Users");                    $uid = $_POST["uid"];                         $pwd = $_POST["pwd"];                    $attr = $model->field("Pwd")->find($uid);                    //var_dump($attr);                     if($pwd==$attr["pwd"])                     {                         session("uid",$uid);   // 跳轉頁面之前將$uid存入session                    $this->success("登錄成功!","Main");                                            }                    else                     {                        $this->error("登錄失敗!");                         }                 }                else                     {                        $this->error("用戶名或者密碼不能為空!");                         }             }            else             {                $this->error("驗證碼不正確!");                 }         }             }//生成驗證碼的操作方法     function yzm()     {        $config =    array(                 'fontSize'    =>    30,    // 驗證碼字體大小                 'length'      =>    4,     // 驗證碼位數               'useCurve'    =>    true,  // 是否畫混淆曲線               'useNoise'    =>    true,  // 關閉驗證碼雜點             'expire'      =>    60,    // 驗證碼有效期(秒)             'useImgBg'    =>    false,  // 使用背景圖片             'useZh'       =>    true,  // 使用中文驗證碼             'imageW'      =>    240,   // 驗證碼寬度             'imageH'      =>    60,    // 驗證碼高度             'fontttf'     =>    'simhei.ttf', // 驗證碼字體        );        $Verify = new ThinkVerify($config);        $Verify->entry(2);//參數是生成驗證碼的標示,適用于同一個頁面有多個驗證碼的時候,生成驗證碼的標示必須與檢測驗證碼的標示相同,否則驗證碼不正確    }?>

請求Login方法:

詳解ThinkPHP框架之驗證碼

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享