摘要:今天遇到一個很奇怪的,就是我寫了一個程序本地運行正常,但是發布到甲方的服務器上出現無法顯示驗證碼的。適用于驗證碼圖片在新窗口打開的時候顯示了報錯信息以及一堆亂碼的情況下,如果有報錯信息,請根據報錯信息進行檢查驗證碼所調用的字體是否缺失。
今天遇到一個很奇怪的BUG,就是我寫了一個PHP程序本地運行正常,但是發布到甲方的服務器上出現無法顯示驗證碼的BUG。
具體表現就是chorme瀏覽器上顯示一個裂了的圖片小圖標,右鍵點擊該圖片在新窗口打開,仍然是一個裂了的小圖片,并非報錯信息(開啟xdebug擴展和php報錯的情況下),如果是這樣那么就說明驗證碼URL路由和業務邏輯代碼沒問題,是生成驗證碼的環節出問題了,我的Debug思路是這樣的:
1.檢查GD庫是否安裝正確,Linux推薦使用yum或者apt或者pecl等方式安裝,Windows推薦使用phpStudy這個集成環境,他集成好了常用擴展,只需鼠標右鍵開啟即可。(適用于驗證碼圖片在新窗口打開的時候顯示了報錯信息以及一堆亂碼的情況下,如果有報錯信息,請根據報錯信息進行debug)
2.檢查驗證碼所調用的字體是否缺失。有部分驗證碼組件調用的字體在目標計算機上并未安裝,這個需要分析驗證碼模塊的源碼觀察。我用的是ThinkPHP官方的think-captcha,在vendortopthinkthink-captchasrc可以找到他的源碼,在vendortopthinkthink-captchaassets這里可以看到這款驗證碼插件是自帶了字體的,所以ThinkPHP的驗證碼基本上可以不用考慮字體問題,如果是別的驗證碼插件,那么還是要檢查一下這個地方的。
3.把有bug的驗證碼圖片下載下來,以及本地測試正常的驗證碼圖片下載下來,使用記事本查看并且對比。
上圖是本地環境的驗證碼圖片的記事本,我們使用更專業的16進制編輯器來分析一下文件差別。
如圖所示,我們發現bad這個壞文件除了前面多了EF BB BF等數字以外,其他內容一模一樣,說明是PHP在渲染圖片的時候多渲染了這些文字,至于原因我猜測可能是服務器上沒有專業的代碼編輯器,因此運維人員使用普通的Windows記事本修改了php代碼導致多了這個BOM頭部。
如果是第三種原因,解決方法有兩個,一個是在驗證碼的imagepng輸出圖片代碼調用之前用ob_clean清除php的輸出緩沖區。還有就是使用一些工具批量對代碼的bom進行去除。
我這里使用的是ob_clean,在think-captcha的主文件Captcha.php的第203行之前加上ob_clean(),這樣一勞永逸。如果對性能和穩定性有嚴苛要求,建議還是用工具批量去除bom比較保險。同時也建議大家隨時在服務器上裝一個editplus等專業的代碼編輯器。不要用Windows的記事本修改代碼。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28769.html
摘要:在用處理用戶登錄功能時,碰上了驗證碼加載不出來的問題。清空擦掉輸出緩沖區的驗證碼輸出較為簡單,只要調用封裝好的類就行啦。類可以支持驗證碼的生成和驗證功能 在用 thinkPHP3.2.3 處理用戶登錄功能時,碰上了驗證碼加載不出來的問題。 一臉懵逼地調試輸出一下緩沖區的內容: var_dump(ob_get_clean()); // 得到當前緩沖區的內容并刪除當前輸出緩 返回如下圖...
摘要:相關信息,面向過程,面向對象,輕量級。輕量級功能實用,面向過程和面向對象混合開發。找到文件為文件名為驗證碼類沒有在自動加載類中載入,需要手動載入。底層的和會影響原始的框架中的引入,可以使用框架中提供的引入。 不使用框架的問題 在實際工作中,如果不使用框架會遇到的問題。 程序項目生命時間非常短(維護性,生命力弱) 分共協作開發項目,彼此代碼風格不一致。 開發程序,喜歡挖坑。 開發者離職...
摘要:數據庫文件已經上傳,安裝配置就可以使用簡稱即基于的后臺管理系統官方文檔地址在線體驗地址賬戶密碼線上倉庫在線地址源代碼下載克隆直接下載本地部署運行環境要求建議配置虛擬域名若不清楚,請自行解決之,方便接下來開展你的開發工作。 喜歡就Star,不只是Fork; 想要分享的動機才是驅動力,而技術僅僅是一種方法。 數據庫文件已經上傳,安裝配置就可以使用 showImg(https://seg...
摘要:數據庫文件已經上傳,安裝配置就可以使用簡稱即基于的后臺管理系統官方文檔地址在線體驗地址賬戶密碼線上倉庫在線地址源代碼下載克隆直接下載本地部署運行環境要求建議配置虛擬域名若不清楚,請自行解決之,方便接下來開展你的開發工作。 喜歡就Star,不只是Fork; 想要分享的動機才是驅動力,而技術僅僅是一種方法。 數據庫文件已經上傳,安裝配置就可以使用 showImg(https://seg...
閱讀 3070·2023-04-25 16:50
閱讀 904·2021-11-25 09:43
閱讀 3512·2021-09-26 10:11
閱讀 2518·2019-08-26 13:28
閱讀 2531·2019-08-26 13:23
閱讀 2419·2019-08-26 11:53
閱讀 3566·2019-08-23 18:19
閱讀 2987·2019-08-23 16:27