奋战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.多搜刮
原来,再大的房子,再大的床,没有相爱的人陪伴,都只是冰冷的物质。而如果身边有爱人陪伴,即使房子小,床小,也觉得无关紧要,因为这些物质上面有了爱的温度,成了家的元素。—— 何珞《婚房》#书摘#
昨天终于将客户的一个网站迁徙至虚拟主机上,满怀的敲入网址。唰的一声,网站很轻松的被打开了。 心里那个兴奋啊~~~ 咦,怎么产品都没有显示出来。一块块都是空白。敲入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.多搜刮
原来,再大的房子,再大的床,没有相爱的人陪伴,都只是冰冷的物质。而如果身边有爱人陪伴,即使房子小,床小,也觉得无关紧要,因为这些物质上面有了爱的温度,成了家的元素。—— 何珞《婚房》#书摘#