PHP错误Warning: Cannot modify header information - headers already sent by解决方法


Posted in PHP onSeptember 27, 2014

今天在测试以下代码时遇到该错误:

session_start();

$_SESSION['username']=$username;

echo "<script language='javascript'>location.href='../admin.php';</script>";

exit();

出现错误:

Warning: Cannot modify header information - headers already sent by...

看了一些网上的方法也没解决,最后在php.ini配置output_buffering默认为4096就没有遇到这个错误了:

output_buffering设置说明:

    Off: 表示关闭PHP输出缓存
    On: 打开无限大的输出缓存
    4096: 打开大小为4096Byte的输出缓存

默认情况下,php buffer是开启的,而且该buffer默认值是4096,即4kb。你可以通过在php.ini配置文件中找到output_buffering配置.当echo,print等输出用户数据的时候,输出数据都会写入到php output_buffering中,直到output_buffering写满,会将这些数据通过tcp传送给浏览器显示。你也可以通过ob_start()手动激活php output_buffering机制,使得即便输出超过了4kb数据,也不真的把数据交给tcp传给浏览器,因为ob_start()将php buffer空间设置到了足够大。只有直到脚本结束,或者调用ob_end_flush函数,才会把数据发送给客户端浏览器。

关于output_buffering详细介绍可以参考:

补充:当然你也可以通过去除BOM解决这个问题,建议以UTF-8无BOM格式编码。感谢 @ihipop 童鞋
关于BOM,简单的来说,软件通过BOM来识别这个文件是否是UTF-8编码。在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。

其中有提到另一个麻烦:“受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。”这个应该就是Wordpress后台出现空白页面的原因了,因为任何一个被执行的文件包含了BOM,这三个字符都将被送出,导致依赖cookies和session的功能失效,所以你也可能遇到如下错误:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at E:\web\index.php:1) in E:\web\functions\sessions.php on line 39
PHP 相关文章推荐
PHP4实际应用经验篇(2)
Oct 09 PHP
php 常用类汇总 推荐收藏
May 13 PHP
解析PHP中的unset究竟会不会释放内存
Jul 18 PHP
PHP浮点数精度问题汇总
May 13 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
php进行ip地址掩码运算处理的方法
Jul 11 PHP
php实现登陆模块功能示例
Oct 20 PHP
Zend Framework常用校验器详解
Dec 09 PHP
php创建多级目录与级联删除文件的方法示例
Sep 12 PHP
调试php程序的简单步骤
Oct 04 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 PHP
PHP中的output_buffering详细介绍
Sep 27 #PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 #PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 #PHP
PHP会话控制:Session与Cookie详解
Sep 27 #PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
Sep 24 #PHP
php实现获取及设置用户访问页面语言类
Sep 24 #PHP
php实现的zip文件内容比较类
Sep 24 #PHP
You might like
Thinkphp中的curd应用实用要点
2015/01/04 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
JSON JQUERY模板实现说明
2010/07/03 Javascript
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
vue webpack打包优化操作技巧
2018/02/22 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
Python callable()函数用法实例分析
2018/03/17 Python
PyQt5实现拖放功能
2018/04/25 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
transform python环境快速配置方法
2018/09/27 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
PyQt5响应回车事件的方法
2019/06/25 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
为什么group by 和order by会使查询变慢
2014/05/16 面试题
车间安全生产标语
2014/06/06 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
道德与公民自我评价
2015/03/09 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书