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 相关文章推荐
发挥语言的威力--融合PHP与ASP
Oct 09 PHP
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 PHP
php中url函数介绍及使用示例
Feb 13 PHP
PHP实现采集中国天气网未来7天天气
Oct 15 PHP
php文件读取方法实例分析
Jun 20 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
php 截取utf-8格式的字符串实例代码
Oct 30 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 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
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
php fckeditor 调用的函数
2009/06/21 PHP
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
toString()一个会自动调用的方法
2010/02/08 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
Python中关于使用模块的基础知识
2015/05/24 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
python负载均衡的简单实现方法
2018/02/04 Python
Django中间件实现拦截器的方法
2018/06/01 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
html5 标签
2009/07/16 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
管理专员自荐信
2014/01/26 职场文书
公证委托书格式
2014/09/13 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
2015新年寄语大全
2014/12/08 职场文书
《黄道婆》教学反思
2016/02/22 职场文书