完美解决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 split汉字
Jun 05 PHP
PHP Stream_*系列函数
Aug 01 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
PHP微信分享开发详解
Jan 14 PHP
自制PHP框架之模型与数据库
May 07 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
Jun 05 PHP
基于PHP实现微信小程序客服消息功能
Aug 12 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 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
使用adodb lite解决问题
2006/12/31 PHP
PHP 字符串分割和比较
2009/10/06 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
js 验证密码强弱的小例子
2013/03/21 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
js触发select onchange事件的小技巧
2014/08/05 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
javascript动画系列之模拟滚动条
2016/12/13 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
Python实现包含min函数的栈
2016/04/29 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
django处理select下拉表单实例(从model到前端到post到form)
2020/03/13 Python
Python接口测试文件上传实例解析
2020/05/22 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
python安装sklearn模块的方法详解
2020/11/28 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
荷兰多品牌网上鞋店:Stoute Schoenen
2017/08/24 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
《彩色世界》教学反思
2014/04/12 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
老公保证书怎么写
2015/02/26 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
Golang 并发编程 SingleFlight模式
2022/04/26 Golang