完美解决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 相关文章推荐
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
php ci框架验证码实例分析
Jun 26 PHP
PHP生成Gif图片验证码
Oct 27 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
PHP5.3新特性小结
Feb 14 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
php策略模式简单示例分析【区别于工厂模式】
Sep 25 PHP
Laravel5.1 框架响应基本用法实例分析
Jan 04 PHP
phpQuery采集网页实现代码实例
Apr 02 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 页面跳转到另一个页面的多种方法方法总结
2009/07/07 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
详解laravel安装使用Passport(Api认证)
2018/07/27 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
Ajax基础知识详解
2017/02/17 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
js回文数的4种判断方法示例
2019/06/04 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
python开发之文件操作用法实例
2015/11/13 Python
python版本的读写锁操作方法
2016/04/25 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
Django之使用celery和NGINX生成静态页面实现性能优化
2019/10/08 Python
python中线程和进程有何区别
2020/06/17 Python
Python将字典转换为XML的方法
2020/08/01 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
低碳生活倡议书
2014/04/14 职场文书
操行评语大全
2014/04/30 职场文书
辅导员学期工作总结
2015/08/14 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL