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 购物车的例子
May 04 PHP
PHP中通过加号合并数组的一个简单方法分享
Jan 27 PHP
PHP的加密方式及原理
Jun 14 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
php微信公众号开发之图片回复
Oct 20 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 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
文章推荐系统(二)
2006/10/09 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
jquery.validate分组验证代码
2011/03/17 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
JSON格式的时间/Date(2367828670431)/格式转为正常的年-月-日 格式的代码
2016/07/27 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
JS实现“全选”和&quot;全不选&quot;功能代码实例
2020/02/06 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
Python 代码性能优化技巧分享
2012/08/07 Python
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
python添加模块搜索路径方法
2017/09/11 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
python绘制多个子图的实例
2019/07/07 Python
南京某软件公司的.net面试题
2015/11/30 面试题
JAVA软件工程师测试题
2014/07/25 面试题
公司财务工作总结的自我评价
2013/11/23 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
超市客服工作职责
2014/06/11 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android