完美解决PHP中的Cannot modify header information 问题


Posted in PHP onAugust 12, 2013

我就遇到这种问题,网上找到这个解决的方案,就收藏下
写PHP的朋友们肯定遇到过这样一个问题:通过header函数改变http协议头的时候,会出现一个类似下面格式的warning:

Warning: Cannot modify header information - headers already sent by

这是为什么呢?因为在使用header函数之前,您不能输出任何东西,包括用echo或var_dump等输出函数的输出,还有在<?php之前的空格。不过有的时候,我们并没有输出任何东西,却还是会出现这个错误,这是因为我们的文件包含了BOM签名,我们必须把它去掉。下面我们就来讨论这个问题。

请看测试代码:

<?php
header("content-type:text/html;charset=utf-8");
die();
?>

这段代码就是简单的header一下,在<?php之前也没有任何输出,也没有空格,但是网页里还是提示了Cannot modify header information的警告信息。这说明,在<?php之前还有内容,只是编辑器没有显示出来。

我们用ultraEdit打开这个文件,切换到16进制,可以看到,在文本的开头,有EFBBBF,之后才是3C 3F 70 68 70 ( <?php ),说明,在<?php之前,确实存在着输出信息,因此,在修改header的时候,会得到警告信息。

完美解决PHP中的Cannot modify header information 问题

这个EFBBBF是什么东西呢?它的名字叫BOM,Byte Order Mark,是在Windows下的一个约定,用于标记文本是否是Unicode。记事本程序就是通过这三个字节来判断文件是ANSI还是Unicode。

知道了问题发生的原因,下面,我们想办法把BOM去掉。用Dreamweaver打开这个php页面,然后进入页面设置(按Ctrl+J),弹出以下窗口:
    完美解决PHP中的Cannot modify header information 问题

取消选择“包括Unicode签名(BOM)”,确定就可以了。现在,我们再用UltraEdit打开看这个文件的16进制内容,如下图

完美解决PHP中的Cannot modify header information 问题

可以看到,现在BOM信息已经没有了,文件直接以3C3F70开头了。

最后,我们刷新一下浏览器,发现现在已经没有Warning提示了,问题解决。

PHP 相关文章推荐
一个图形显示IP的PHP程序代码
Oct 19 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
如何使用PHP计算上一个月的今天
May 23 PHP
PHP开发微信支付的代码分享
May 25 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
PHP工程师VIM配置分享
Dec 15 PHP
PHP编程基本语法快速入门手册
Jan 07 PHP
PHP实现添加购物车功能
Mar 06 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
laravel 解决强制跳转 https的问题
Oct 22 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 #PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 #PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 #PHP
php中的Base62类(适用于数值转字符串)
Aug 12 #PHP
PHP实现把数字ID转字母ID
Aug 12 #PHP
PHP计算2点经纬度之间的距离代码
Aug 12 #PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 #PHP
You might like
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
php 运行效率总结(提示程序速度)
2009/11/26 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
PHP文件与目录操作示例
2016/12/24 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
来自qq的javascript面试题
2010/07/24 Javascript
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
JsonServer安装及启动过程图解
2020/02/28 Javascript
Python中decorator使用实例
2015/04/14 Python
Python简明入门教程
2015/08/04 Python
安装Python的教程-Windows
2017/07/22 Python
python实现猜单词小游戏
2020/05/22 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Python使用gRPC传输协议教程
2018/10/16 Python
对python判断是否回文数的实例详解
2019/02/08 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
掌上明珠Java程序员面试总结
2016/02/23 面试题
元宵节晚会主持人串词
2014/03/25 职场文书
起诉书范文
2015/05/20 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android