溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThinkPHP驗證碼不顯示的解決方法

發布時間:2021-03-10 09:56:50 來源:億速云 閱讀:263 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關ThinkPHP驗證碼不顯示的解決方法的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

今天遇到一個很奇怪的BUG,就是我寫了一個PHP程序本地運行正常,但是發布到甲方的服務器上出現無法顯示驗證碼的BUG。

ThinkPHP驗證碼不顯示的解決方法

具體表現就是chorme瀏覽器上顯示一個裂了的圖片小圖標,右鍵點擊該圖片在新窗口打開,仍然是一個裂了的小圖片,并非報錯信息(開啟xdebug擴展和php報錯的情況下),如果是這樣那么就說明驗證碼URL路由和業務邏輯代碼沒問題,是生成驗證碼的環節出問題了,我的Debug思路是這樣的:

1.檢查GD庫是否安裝正確,Linux推薦使用yum或者apt或者pecl等方式安裝,Windows推薦使用phpStudy這個集成環境,他集成好了常用擴展,只需鼠標右鍵開啟即可。(適用于驗證碼圖片在新窗口打開的時候顯示了報錯信息以及一堆亂碼的情況下,如果有報錯信息,請根據報錯信息進行debug)

ThinkPHP驗證碼不顯示的解決方法

2.檢查驗證碼所調用的字體是否缺失。有部分驗證碼組件調用的字體在目標計算機上并未安裝,這個需要分析驗證碼模塊的源碼觀察。我用的是ThinkPHP官方的think-captcha,在vendortopthinkthink-captchasrc可以找到他的源碼,在vendortopthinkthink-captchaassets這里可以看到這款驗證碼插件是自帶了字體的,所以ThinkPHP的驗證碼基本上可以不用考慮字體問題,如果是別的驗證碼插件,那么還是要檢查一下這個地方的。

3.把有bug的驗證碼圖片下載下來,以及本地測試正常的驗證碼圖片下載下來,使用記事本查看并且對比。

ThinkPHP驗證碼不顯示的解決方法

上圖是本地環境的驗證碼圖片的記事本,我們使用更專業的16進制編輯器來分析一下文件差別。

ThinkPHP驗證碼不顯示的解決方法

如圖所示,我們發現bad這個壞文件除了前面多了EF BB BF等數字以外,其他內容一模一樣,說明是PHP在渲染圖片的時候多渲染了這些文字,至于原因我猜測可能是服務器上沒有專業的代碼編輯器,因此運維人員使用普通的Windows記事本修改了php代碼導致多了這個BOM頭部。

如果是第三種原因,解決方法有兩個,一個是在驗證碼的imagepng輸出圖片代碼調用之前用ob_clean清除php的輸出緩沖區。還有就是使用一些工具批量對代碼的bom進行去除。

ThinkPHP驗證碼不顯示的解決方法

我這里使用的是ob_clean,在think-captcha的主文件Captcha.php的第203行之前加上ob_clean(),這樣一勞永逸。如果對性能和穩定性有嚴苛要求,建議還是用工具批量去除bom比較保險。同時也建議大家隨時在服務器上裝一個editplus等專業的代碼編輯器。不要用Windows的記事本修改代碼。

感謝各位的閱讀!關于“ThinkPHP驗證碼不顯示的解決方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女