ThinkPHP 內(nèi)置了驗證碼的支持,可以直接使用,要使用驗證碼,需要導(dǎo)入擴展類庫中的 ORG.Util.Image 類庫和 ORG.Util.String 類庫.
驗證碼方法
我們通過在在模塊類中增加一個 verify 方法來用于顯示驗證碼,最簡單的例子:
- Public function verify(){
- // 導(dǎo)入Image類庫
- import("ORG.Util.Image");
- Image::buildImageVerify();
- }
import 方法是 ThinkPHP 內(nèi)置的類庫和文件導(dǎo)入方法,上例導(dǎo)入的文件為 ThinkPHP 系統(tǒng)目錄下 Lib/ORG/Util/Image.class.php 文件,如果已經(jīng)將 Image 類庫拷貝到了當(dāng)前項目下,如 Lib/ORG 下,則可以以:
import("@.Util.Image");
方式導(dǎo)入,具體可參見《ThinkPHP import 類庫導(dǎo)入》.
import 方法是 ThinkPHP 內(nèi)置的類庫和文件導(dǎo)入方法,上例導(dǎo)入的文件為 ThinkPHP 系統(tǒng)目錄下 Lib/ORG/Util/Image.class.php 文件.
訪問驗證碼
可以直接在瀏覽器里訪問該驗證碼方法以確定驗證碼是否能正常顯示:
http://127.0.0.1/index.php/Public/verify
表單中使用驗證碼
在表單頁面中使用驗證碼,是以 html img標(biāo)簽 來調(diào)用:
- <input type="text" name="verify">
- <img id="verifyImg" src="__URL__-verify" onClick="changeVerify()" title="點擊刷新驗證碼" />
src 屬性值即為驗證碼方法訪問地址,視實際情況不同而不同.
驗證碼刷新
當(dāng)點擊驗證碼圖片時,觸發(fā) JavaScript changeVerify() 函數(shù)重新讀取驗證碼,從而實現(xiàn)驗證碼刷新,該函數(shù)參考如下:
- <script language="JavaScript">
- function changeVerify(){
- var timenow = new Date().getTime();
- document.getElementByIdx_x('verifyImg').src='__URL__/verify/'+timenow;
- }
- </script>
驗證碼驗證
在調(diào)用驗證碼 verify 的時候,buildImageVerify 會記錄本次驗證碼的 MD5 信息,在表單驗證操作里,以如下方法來檢查驗證碼是否正確:
- if($_SESSION['verify'] != md5($_POST['verify']))
- {
- $this->error('驗證碼錯誤!');
- }
其中 $_SESSION['verify'] 中的 verify 名稱為 buildImageVerify 方法默認(rèn) SESSION 注冊名稱,具體見 buildImageVerify 語法.
上面例子演示了最簡單的 ThinkPHP 驗證碼的使用方法,上面的例子驗證碼是 4 位數(shù)字.
驗證碼不顯示原因
如下發(fā)現(xiàn)無法顯示驗證碼,可能的原因如下:
PHP 是否已經(jīng)安裝 GD 庫支持,了解更多 GD 庫信息參見《PHP 圖像處理》GD庫部分.
輸出之前是否有任何的輸出(尤其是 UTF8 的 BOM 頭信息輸出).
Image 類庫是否正確導(dǎo)入,如果是表單頁面,請查看是否正確調(diào)用了驗證碼顯示方法.
新聞熱點
疑難解答
圖片精選