新聞中心
Thinkphp中文驗(yàn)證碼不顯示解決方法
一個(gè)好的php開源程序,應(yīng)該經(jīng)得起成千上萬(wàn)的使用測(cè)試。今天無(wú)憂主機(jī)小編在處理客戶問(wèn)題的時(shí)候,遇到了一個(gè)關(guān)于thinkphp中文驗(yàn)證碼的問(wèn)題。 我們都知道,php開源程序所設(shè)置的驗(yàn)證碼功能,目的是為了保護(hù)網(wǎng)站的一些信息。比如說(shuō),登陸管理后臺(tái)需要輸入驗(yàn)證碼,可以多一道安全屏障。而相對(duì)于英文驗(yàn)證碼,中文驗(yàn)證碼的安全系數(shù)又更上一層樓。但是今天客戶遇到的問(wèn)題是,英文驗(yàn)證碼顯示并沒(méi)有問(wèn)題,但是設(shè)置中文驗(yàn)證碼時(shí)缺無(wú)法顯示。客戶使用的thinkphp版本是2.0,因?yàn)槌绦蛞恢笨梢允褂?,也就沒(méi)有更換程序重新建站。 無(wú)憂主機(jī)小編檢查了一下thinkphp字體文件等,并沒(méi)有發(fā)現(xiàn)問(wèn)題。這時(shí)無(wú)憂主機(jī)小編想到,之前有處理過(guò)一個(gè)客戶的問(wèn)題,其驗(yàn)證碼不顯示的原因是文件上傳時(shí)少上傳了一個(gè)類:string。這個(gè)類中的某個(gè)函數(shù),是被中文驗(yàn)證碼功能所調(diào)用的。而無(wú)憂主機(jī)小編詢問(wèn)了下度娘,了解到中文驗(yàn)證碼調(diào)用方法是在thinkphp\Lib\ORG\Util\Image.class.php 文件中的GBVerify方法。 小編對(duì)代碼不是很明白,但是如果是調(diào)用某個(gè)類中的功能,一定要出現(xiàn)那個(gè)類的名稱。于是小編開始了漫漫實(shí)驗(yàn)路。經(jīng)過(guò)多次的實(shí)驗(yàn),在Image.class.php的GBVerify(thinkphp中文驗(yàn)證碼)方法中,第322行有這樣一段代碼: $codex= msubstr($code,$i,1); 而在之前小編了解到msubstr這個(gè)函數(shù)是調(diào)用string類中的。都沒(méi)有出現(xiàn)string,如何能調(diào)用到這個(gè)類?當(dāng)然是不可能的。 在請(qǐng)教了無(wú)憂主機(jī)的程序員之后,小編把以上那段代碼做了以下修改: $codex= String::msubstr($code,$i,1); 這樣修改的目的是讓msubstr這個(gè)函數(shù)調(diào)用到string類。 果然這樣做了修改之后,中文驗(yàn)證碼成功的顯示出來(lái)了。 無(wú)憂主機(jī)小編認(rèn)為,這樣的問(wèn)題應(yīng)該是程序開發(fā)人員考慮不周,雖然版本比較老,新版本的thinkphp可能并沒(méi)有這個(gè)問(wèn)題,但是程序開發(fā)過(guò)程中,小編認(rèn)為中文驗(yàn)證碼的問(wèn)題還是應(yīng)該可以考慮到的。當(dāng)然,如果您的thinkphp遇到這樣的問(wèn)題,可以嘗試用小編的這個(gè)方法進(jìn)行解決。
本文地址:http://www.gle-technology.com/thinkphp/12904.html