幾乎所有登陸都會使用到的乙個東西---驗證碼。
不過很多時候會出現驗證碼不顯示的問題,下面就我做自己以前遇到過的一些小問題來簡單寫一下。
1.最基本的乙個,檢視配置中gd庫有沒有開啟。(php中可以使用phpinfo();直接檢視各項資訊),如果找不到該項資訊表示沒有開啟,需要在php.ini中進行開啟。
記得修改完配置資訊一定要進行重啟操作。
2.檢視bom頭問題,必須為utf-8無bom格式檔案。這個可以使用編輯器直接設定。在win下使用記事本儲存的東西切記格式不對,如果驗證碼突然不顯示了可以想下是否使用記事本開啟過相關檔案直接儲存了。關於去除bom問題,在另一篇文章寫過。去除bom頭問題。
3.這個原因可有可無(檢視trace模式是否為開啟狀態,需關閉->這是tp框架中)。
4.當專案在虛擬主機上的時候要機型緩衝區資料儲存配置。以及tp中在生成驗證碼的地方加上 ob_clean();清除bom頭 或者 ob_end_clean() linux上也要注意快取目錄的許可權問題
bom:
bom
(byte order mark)
,
就是位元組序標記。在
ucs(
unicode character set
) 編碼中有乙個叫做
"zero width no-break space(
零寬度無斷空白
)"的字元,它的編碼是
feff
。而fffe
在ucs
中是不存在的字元,所以不應該出現在實際傳輸中。
ucs規範建議我們在傳輸位元組流前,先傳輸字元
"zero width no-break space"
。這樣如果接收者收到
feff
,就表明這個位元組流是
big-endian
的;如果收到
fffe
,就表明這個位元組流是
little-endian
的。因此字元
"zero width no-break space"
又被稱作
bom。
utf-8
不需要bom
來表明位元組順序,但可以用
bom來表明編碼方式。字元
"zero width no-break space"
的utf-8
編碼是ef bb bf
。所以如果接收者收到以
ef bb bf
開頭的位元組流,就知道這是
utf-8
編碼了。
windows
就是使用
bom來標記文字檔案的編碼方式的。當以
utf-16
或utf-32
來將ucs
所組成的字串編碼時,這個字元被用來標示其位元組序。它常被用來當做標示檔案是以
utf-8
、utf-16
或utf-32
編碼的記號。
/// 傳送
header
前不能有任何的輸出!
我是用ultraedit
來編輯php
的,在ultraedit
新建的檔案,如果檔案中有中文字元,儲存時會在檔案中寫入
bom資訊。一般情況下,這樣並不會出什麼問題,但
php4,5
都是不支援
bom的。
在使用header()
、setcookie()
、session_start()
這三個函式時
, 都要求在使用前不能對瀏覽器有任何輸出。由於受
cookie
送出機制的限制,在有
bom的檔案中,
cookie
無法送出,因為在
cookie
送出前php
已經送出了檔案頭。
如果在處理
php檔案後出現以下問題,多半是因為這個原因: *
驗證碼不顯示; *
頁面顯示乙個「鍩」字,其他一片空白; *
不能登入或登出; *
頁頂出現一行空白; *
頁頂出現錯誤警告
ecshop驗證碼不顯示
1 公司最近用乙個ecshop做乙個專案,但是在後台登陸和找回密碼的時候發現驗證碼是不顯示的 解決加法 找到根目錄下 wwwroot includes init.php的這個檔案把如下 注釋掉就可以了 判斷是否支援 gzip 模式 if defined init no smarty gzip ena...
ecshop驗證碼不顯示
1 公司最近用乙個ecshop做乙個專案,但是在後台登陸和找回密碼的時候發現驗證碼是不顯示的 解決加法 找到根目錄下 wwwroot includes init.php的這個檔案把如下 注釋掉就可以了 判斷是否支援 gzip 模式 if defined init no smarty gzip ena...
php驗證碼顯示不了,php驗證碼不顯示解決方法
解決方法 2 utf 8 bom頭原因。用editplus ultraedit,刪除即可。3 輸出緩衝區中的快取問題。輸出前,使用ob clean函式解決。4 輸出前,不能出現echo print r var dump等列印,注釋或刪除解決。解決問題之後的 w 80 設定寬和高 h 26 str a...