奋战5个小时解决诡异的PHP--“图像XX因其本身有错无法显示”的题目

    添加时间:2013-8-2 点击量:

      昨天终于将客户的一个网站迁徙至虚拟主机上,满怀的敲入网址。唰的一声,网站很轻松的被打开了。 心里那个兴奋啊~~~ 咦,怎么产品都没有显示出来。一块块都是空白。敲入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


     办事器返回成果:



    本地返回成果:



    异同是:办事器文件头多了一个 FF BB BF


    这个是什么呢?持续搜刮,成果是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.多搜刮



    原来,再大的房子,再大的床,没有相爱的人陪伴,都只是冰冷的物质。而如果身边有爱人陪伴,即使房子小,床小,也觉得无关紧要,因为这些物质上面有了爱的温度,成了家的元素。—— 何珞《婚房》#书摘#
    分享到: