完美解决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 相关文章推荐
php4的session功能评述(三)
Oct 09 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
Jul 22 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
Aug 22 PHP
php图片添加文字水印实现代码
Mar 15 PHP
PHP生成静态HTML文档实现代码
Jun 23 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 PHP
浅谈Laravel核心解读之Console内核
Dec 02 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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链接MySQL的常用扩展函数
2014/10/23 PHP
PHP培训要多少钱
2017/06/06 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
js验证表单第二部分
2006/11/25 Javascript
div层的移动及性能优化
2010/11/16 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
pycharm 使用心得(五)断点调试
2014/06/06 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
Python脚本完成post接口测试的实例
2018/12/17 Python
详解python中递归函数
2019/04/16 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
2014年预备党员学习两会心得体会
2014/03/17 职场文书
绿色环保演讲稿
2014/05/10 职场文书
安全生产承诺书范文
2014/05/22 职场文书
副总经理任命书
2014/06/05 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python