thinkphp是一款流行的php框架,用于開(kāi)發(fā)web應(yīng)用程序。在使用thinkphp框架時(shí),很多時(shí)候需要用到驗(yàn)證碼來(lái)增加系統(tǒng)的安全性。而thinkphp默認(rèn)的驗(yàn)證碼樣式和圖片可能不太適合某些應(yīng)用場(chǎng)景,需要進(jìn)行更改。本文就介紹一下如何更改thinkphp默認(rèn)的驗(yàn)證碼。
一、找到驗(yàn)證碼控制器
在thinkphp框架中,驗(yàn)證碼是由內(nèi)置的一個(gè)控制器進(jìn)行生成和輸出的。這個(gè)控制器的源代碼可以在thinkphp框架的庫(kù)文件目錄中找到,一般路徑是:thinkphp/library/think/captcha/Controller.php。
二、復(fù)制驗(yàn)證碼控制器
為了避免因?yàn)樾薷哪J(rèn)驗(yàn)證碼控制器而導(dǎo)致系統(tǒng)更新時(shí)出錯(cuò),應(yīng)該把默認(rèn)驗(yàn)證碼控制器復(fù)制到應(yīng)用目錄下的一個(gè)新的目錄中。
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
具體步驟如下:
- 創(chuàng)建一個(gè)新的目錄,例如:applicationextracaptcha
- 復(fù)制控制器Controller.php到該目錄下。
- 修改Controller.php的Namespace,將其修改為:namespace appextracaptcha;
三、修改驗(yàn)證碼控制器
現(xiàn)在我們就可以修改驗(yàn)證碼控制器,改變驗(yàn)證碼的生成方式和輸出方式了。
- 修改輸出方式
默認(rèn)驗(yàn)證碼的輸出方式是返回一個(gè)gif格式的圖片,而我們可以修改輸出方式來(lái)實(shí)現(xiàn)其他樣式的驗(yàn)證碼。例如,可以將驗(yàn)證碼輸出為SVG格式的圖片。
修改驗(yàn)證碼輸出方法如下:
public function show() { $config = [ 'expire' => 3, //驗(yàn)證碼過(guò)期時(shí)間(s) 'length' => 4, //驗(yàn)證碼長(zhǎng)度 'imageH' => 60, //驗(yàn)證碼高度 'fontSize' => 20, //驗(yàn)證碼字體大小(px) 'useCurve' => false, //是否畫(huà)混淆曲線 'useNoise' => false, //是否添加雜點(diǎn) 'bg' => [255, 255, 255], //背景顏色 ]; $captcha = new Captcha($config); $captcha->codeSet = '0123456789';//只用數(shù)字作為驗(yàn)證碼 // 輸出svg格式的圖片 echo $captcha->entry('svg'); }
- 修改驗(yàn)證碼生成方式
thinkphp默認(rèn)的驗(yàn)證碼生成方式是隨機(jī)生成數(shù)字和字母,而我們也可以修改生成方式來(lái)滿足不同的需求。例如,可以生成中文字符的驗(yàn)證碼。
修改驗(yàn)證碼生成方式如下(以生成中文驗(yàn)證碼為例):
public function show() { //引入新字體文件(這里以方正胖頭魚(yú)體為例,字體文件需要自己上傳) $ttf_file = __DIR__ .'/fzpty.ttf'; $codeSet = '玩家參與游戲,從而培養(yǎng)了自己 的游戲能力'; //驗(yàn)證碼文字內(nèi)容 $config = [ 'expire' => 3, //驗(yàn)證碼過(guò)期時(shí)間(s) 'length' => 4, //驗(yàn)證碼長(zhǎng)度 'useZh' => true, //使用中文驗(yàn)證碼 'fontttf' => $ttf_file, //指定ttf字體文件 'imageH' => 60, //驗(yàn)證碼高度 'fontSize' => 20, //驗(yàn)證碼字體大小(px) 'useCurve' => false, //是否畫(huà)混淆曲線 'useNoise' => false, //是否添加雜點(diǎn) 'bg' => [255, 255, 255], //背景顏色 ]; $captcha = new Captcha($config); $captcha->codeSet = $codeSet;//設(shè)置驗(yàn)證碼文字內(nèi)容 // 輸出svg格式的圖片 echo $captcha->entry('svg'); }
四、修改驗(yàn)證碼配置文件
thinkphp驗(yàn)證碼控制器會(huì)讀取配置文件中的參數(shù)來(lái)決定驗(yàn)證碼的生成和輸出方式。因此,我們也可以修改配置文件來(lái)達(dá)到更改驗(yàn)證碼的目的。
具體步驟如下:
- 復(fù)制框架默認(rèn)驗(yàn)證碼配置文件到自己的應(yīng)用目錄
打開(kāi)thinkphp框架的驗(yàn)證碼配置文件config.php,將其復(fù)制到應(yīng)用目錄下的config目錄下,并重命名為captcha.php。
- 修改驗(yàn)證碼配置
在captcha.php中可以修改驗(yàn)證碼的相關(guān)配置參數(shù)。例如,可以修改驗(yàn)證碼的長(zhǎng)度,過(guò)期時(shí)間,字體大小等參數(shù):
return [ 'useNoise' => false, // 是否添加雜點(diǎn) 'useCurve' => false, // 是否畫(huà)混淆曲線 'fontSize' => 25, // 驗(yàn)證碼字體大小 'expire' => 1800, // 驗(yàn)證碼過(guò)期時(shí)間(s) 'length' => 4, // 驗(yàn)證碼長(zhǎng)度 'fontttf' => '', //驗(yàn)證碼字體文件路徑 'bg' => [255, 255, 255], // 驗(yàn)證碼背景顏色,如果設(shè)置為數(shù)組則表示漸變色 ];
五、總結(jié)
通過(guò)以上步驟,我們可以對(duì)thinkphp默認(rèn)的驗(yàn)證碼進(jìn)行修改,實(shí)現(xiàn)自定義的樣式和驗(yàn)證碼內(nèi)容。需要注意的是,在修改驗(yàn)證碼控制器和配置文件時(shí),要將復(fù)制后的文件放到應(yīng)用目錄下,避免出現(xiàn)版本更新后覆蓋掉的情況。