搜尋
首頁php框架ThinkPHP搞定ThinkPHP驗證碼不顯示的問題

下面由thinkphp框架教學欄位來介紹ThinkPHP驗證碼不顯示的解決方案,希望對需要的朋友有幫助!

搞定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驗證碼不顯示的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。