完美解决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 相关文章推荐
我的论坛源代码(四)
Oct 09 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
php生成带logo二维码方法小结
Apr 08 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
php while循环控制的简单实例
May 30 PHP
php die()与exit()的区别实例详解
Dec 03 PHP
如何离线执行php任务
Feb 21 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 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
十天学会php(2)
2006/10/09 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
微信JS接口大全
2016/08/25 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
Vue CLI3 开启gzip压缩文件的方式
2018/09/30 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
javascript History对象原理解析
2020/02/17 Javascript
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
is_file和file_exists效率比较
2021/03/14 PHP
爱普生美国官网:Epson美国
2018/11/05 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
Java如何支持I18N?
2016/10/31 面试题
高中同学聚会邀请函
2014/01/11 职场文书
军训自我鉴定范文
2014/02/13 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
《童趣》教学反思
2014/02/19 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
税务会计岗位职责
2015/04/02 职场文书
简短清晨问候语
2015/11/10 职场文书
2016教师国培研修感言
2015/12/08 职场文书
公司转让协议书
2016/03/19 职场文书
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书
MySQL数据库优化之通过索引解决SQL性能问题
2022/04/10 MySQL