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=1B、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.多搜索

PHP图像 因其本身有错无法显示

时间: 2024-10-30 07:50:07

PHP图像 因其本身有错无法显示的相关文章

解决PHP生成校验码时“图像因其本身有错无法显示”的错误

今天使用http://crazymud.iteye.com/blog/452293给出的代码进行PHP生成校验码功能的实现,发现firefox一直提示“图像.......因其本身有错无法显示”的问题,作者也提示了说“如果浏览器显示“图像XXX因其本身有错无法显示”,可尽量去掉文中空格”,但把代码中所有空格都去掉了还是不能显示检验图片.于是深度google,大部分的解决方案也是将“<?”这句代码前的空格回车一切都删掉以防止有html输出,但这根本解决不了我的问题,后来看到有人在Header("

PHP验证码常见问题及解决办法 (http://localhost/Test/code.php因其本身有错无法显示)

<?php session_start(); //随机码的个数 $_rnd_code = 4; //创建随机码 for ($i=0;$i<$_rnd_code;$i++) { $_nmsg .= dechex(mt_rand(0,15)); } //保存在session $_SESSION['code'] = $_nmsg; //长和高 $_width = 75; $_height = 25; //创建一张图像 $_img = imagecreatetruecolor($_width,$_he

重启网卡报错,显示device not managed by NetworkManager

虚机安装fedora 14 ,装完后setup设置IP,重启网卡报错,显示device not managed by NetworkManager 解决方法: service NetworkManager stop 再启动网卡就OK了

nginx关闭php报错页面显示

默认情况下nginx是会显示php的报错的,如果要关闭报错显示,需要在php-fpm.ini文件里面设置,貌似默认情况下在php.ini关闭没效果, 如下设置就可以了: ;php_flag[display_errors] = off php_admin_value[error_log] = /data/www/log/error.log php_admin_flag[log_errors] = on 如果没有生效,查看下phpinfo()输出的结果中,display_errors,error_l

ie8浏览器 图片本身问题导致 无法显示图片--- 诡异现象的排查分享

引子:   前段时间 做新版2.0 首页 的时候, 总感觉 新版首页 线上 精彩回顾下的 2张图片颜色怪怪的,当时以为是图片压缩太厉害导致的,由于实在太忙就没太在意!以下 是来自线上 截图:  红色方框 我认为  那2张 怪怪的 图片,大家感受下颜色是否不一样!   问题描述:        今天,测试同学找到我,说新版首页 精彩回顾下方 2张图片 在 ie8下 图片展现不出来了!   开始排查:  通过 浏览器 查看图片 DOM结构, 代码如下:  <img data-original="

Q:图像太大,在opencv上显示不完全

将cvNamedWindow的这句代码的第二个参数,由自动改为正常 cvNamedWindow("MyCalib",CV_WINDOW_NORMAL);

解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题

官方说明链接: https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000736584-SciView-in-PyCharm-2017-3-reduces-functionality-of-Matplotlib pycharm从2017.3版之后,将matplotlib的绘图的结果默认显示在SciView窗口中, 而不是弹出独立的窗口, 如图 如果不喜欢这种设置,可以通过如下方式修改,弹出独立窗口 File | S

如何解决php 生成验证码图片不显示问题

最近遇到一个问题,就是验证码在别人的电脑上可以显示,但是我自己的电脑上去不能.原因找了好久,哈哈,终于找到了!现在给大家分享一下: 程序: <?php $w = 80; //设置图片宽和高 $h = 26; $str = Array(); //用来存储随机码 $string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//随机挑选其中4个字符,也可以选择更多,注意循环的时候加上,宽度适当调整 for($i = 0;$i < 4;$i++

验证码无法显示

这段时间在写一个验证码,在我的机器上好好的,但是到了公司的电脑上就显示 图像因其本身有错无法显示,这是什么原因呢? 试了好长时间还是没办法解决,于是就去google.网上通用的解决方法是: 1.尽可能去掉中文空格  2.将“<?”这句代码前的空格回车一切都删掉以防止有html输出 但是还是解决不了我的问题.如果你试了上面的方法还是解决不了你可以用下面的方法: 在 Header("Content-type: image/PNG");这句代码前加上ob_clean();清除输出. 试