您的位置:知蚁博客 » 互联网络 » Cannot modify header information – headers already sent by …错误解决

Cannot modify header information – headers already sent by …错误解决

作者: 发布时间:2011-04-02 分类:互联网络 标签: 2,084人浏览

  昨天修改了下评论部分,在主题自带的widget基础上重新定制了一个新的widget,修改了文件上传到服务器上后,发现无法登陆后台了,返回了如下的错误信息:

Warning: Cannot modify header information – headers already sent by (output started at /home/letuknow/public_html/wp-content/themes/istudio-theme/custom.widget.php:33) in /home/letuknow/public_html/wp-includes/pluggable.php on line 897

  通过在网上查阅资料,发现这个是个经典的错误了,俗称的“空白问题”,一般出现的错误信息都和上面类似(具体的文件名和行号可能会有所不同)。

如何解决呢?

  解决起来很简单,空白问题,那就删除空行吧,具体在哪里,请仔细看上面的提示信息,注意括号中部分,需要修改的就是括号中的文件(提示信息中红色部分),在提示信息中还指定到了具体的行号(提示信息中蓝色数字)。

为什么有这样的问题?

  问题虽然解决了,但是不弄明白出错的原因,以后可能还会再出类似的错误,因此还是要研究下为什么会出现这个错误。具体的原因又点小复杂,感兴趣的朋友可以研究下《参考资料》,其实都是BOM惹得祸。

  PHP文件采用UTF-8编码,由于编码不兼容(特别是通过其他编码转换过来的),就会产生BOM。在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。按照UCS规范的建议,在传输字节流前,先传输字符”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。

  UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

  在Windows系统中,就是使用BOM来标记文本文件的编码方式的,这就导致了的头文件不能正确识别,从而出现本文标题所描述的错误。其实本文出现的问题还有一种办法可以解决,就是把这个BOM给干掉,装个notepad++等文本编辑器,将文件转换为UTF-8的无BOM编码格式即可(下图是notepad++中格式菜单的选项,其中直接就可以进行转换)。

  水母之所以遇到这个问题是由于昨天在修改评论模块的时候,由于在文件中写入中文的时候出现乱码,因此把文件另存为了UTF-8格式了,所以出现了本文描述的问题,看来下次另存为的时候要小心点了。
原创文章请注明转载于知蚁博客,本文地址:http://www.letuknowit.com/archives/38

相关文章

1访客评论

  1. 谢谢~~正好用到

    coldplains06-26 22:28 回复

我来说说

(必须)

(必须,保密)

你确定你已经看过文章了?
取消

无觅相关文章插件,快速提升流量