网站报错 headers already sent by?原因分析及解决方案!

吉云

今天真是把我给折腾坏!遇到一个超烦人的问题,弄一下午才搞定,必须得跟你们好好唠唠,记下来省得以后再踩坑。

遇到的问题

我在写一个PHP的小功能时,用到header()函数来跳转页面。结果,页面没跳转,反而给我报个错,错误信息里有这么一句:"headers already sent by",当时我就懵,这是啥意思?

网站报错 headers already sent by?原因分析及解决方案!

排查过程

我第一反应就是,肯定是我代码哪里写错。于是我:

  • 检查代码顺序:我把用到header()函数的那段代码,从头到尾看好几遍,确定header()函数之前没有任何输出。因为我记得很清楚,header()前面是不能有任何输出的,哪怕是一个空格都不行!
  • 检查空格和换行:我还特意把PHP文件的开头和结尾,可能有多余空格或换行的地方都检查一遍,确保没有“隐形”的输出。

网站报错 headers already sent by?原因分析及解决方案!

结果,问题还是没解决,错误依旧。我开始怀疑人生,难道是我的电脑出问题?

发现真凶

没办法,我只好去网上查资料。翻好几个帖子,终于找到问题的关键:UTF-8 BOM!

原来,我用的编辑器,在保存文件的时候,默认给文件加个UTF-8 BOM头。这玩意儿,平时看不见摸不着,但PHP在解析的时候,会把它当成输出内容。这下子,问题的原因总算找到!

解决问题

知道原因就好办。我赶紧打开编辑器,找到设置编码的地方,把“UTF-8 with BOM”改成“UTF-8”,然后保存文件。

网站报错 headers already sent by?原因分析及解决方案!

再运行,一切正常,页面终于跳转!

总结教训

这回的经历真是让我印象深刻。以后写代码,一定要注意这些细节:

  • 代码顺序很重要header()函数前面绝对不能有任何输出。
  • 注意隐藏的BOM头:文件编码要用纯净的UTF-8,不要带BOM。
  • 网站报错 headers already sent by?原因分析及解决方案!

  • 细心细心再细心:遇到问题不要慌,一步一步排查,总能找到解决办法的。

好,今天的分享就到这里。希望我的这回经历能帮到你们,避免踩到同样的坑!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]