程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 奮戰5個小時解決詭異的PHP--“圖像XX因其本身有錯無法顯示”的問題

奮戰5個小時解決詭異的PHP--“圖像XX因其本身有錯無法顯示”的問題

編輯:關於PHP編程

  昨天終於將客戶的一個網站遷移至虛擬主機上,滿懷希望的敲入網址。唰的一聲,網站很輕松的被打開了。 心裡那個高興啊~~~ 咦,怎麼產品圖片都沒有顯示出來。一塊塊都是空白。敲入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.多搜索

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved