昨天終於將客戶的一個網站遷移至虛擬主機上,滿懷希望的敲入網址。唰的一聲,網站很輕松的被打開了。 心裡那個高興啊~~~ 咦,怎麼產品圖片都沒有顯示出來。一塊塊都是空白。敲入img src對應的地址,看看是怎麼回事?結果顯示下面這樣的效果:
IE下是這樣:
沒辦法,開始漫長的調試過程。解決步驟如下:
1. 是否是功能代碼的錯誤:按照 關鍵字 圖像 。。。 因其本身有錯無法顯示,很快google之幾條解決方案。
Header("Content-type: image/PNG");這句代碼前加上ob_clean();清除輸出
在對應的代碼位置加入 ob_clean();
運行的結果沒什麼改變。
PS:為了定位該錯誤,事先用echo一步步輸出調試了很久,才定位之具體的代碼。
2. 思考:為啥在本地好好的,傳上去就錯了呢?是不是環境配置問題。
本地環境 XAMP,服務器環境 :windows + IIS7.5。
為了比較Server返回結果的異同,決定用 Fiddler2 來跟蹤本地訪問同樣一個文件和服務器訪問同樣一個文件的異同。
打開Fiddler2,很快定位出結果。
測試地址:
A、http://www.server.net/index.php?ac=public&at=zoom&filename=upfile%2F2011%2F08%2F30%2F20110830222415_540.jpg&w=&h=120&iszoom=1 B、http://localhost:90/index.php?ac=public&at=zoom&filename=upfile%2F2011%2F08%2F30%2F20110830222415_540.jpg&w=&h=120&iszoom=1
服務器返回結果:
本地返回結果:
異同是:服務器文件頭多了一個
這個是什麼呢?繼續搜索,結果是UTF8的BOM頭。也就是IIS返回的文件裡多了一個BOM頭。
UTF8普及知識見:http://blog.csdn.net/hiruyue/article/details/8747221
3. 開始檢查 有那個文件被變成了帶BOM頭的UTF8,於是找到一個PHP版本的檢測BOM頭的代碼,存成PHP文件,傳到服務器。很快定位到結果,系統的配置文件被改成帶BOM頭的文件了。
這時候,才想起在用FTP上傳網站以後,采用FTP自帶的編輯工具修改了配置文件。當時是用NOTEPAD修改的。原來如此,趕緊將配置文件重新下載,用NOTEPAD++更改文件類型為 不帶BOM的UTF8,保存,上傳,訪問。網站終於恢復了正常。
看看時間,已經過去了5個小時。
PS:在第二步的時候,還看到IIS在發送圖片二進制流之前還發送了一個ICO文件流,這也會導致錯誤。
結束語:
在修改完成以後,發現了Orain兄弟的文章。他遇到的問題和我類似。PHP 使用流方式下載文件與 UTF-8 的 BOM 問題
總結:
1.遇到問題,先想想原因,再去解決。否則很容易糾結在調試代碼中。
2.多搜索