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 存储文本换行实现方法
Jan 05 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
基于php在各种web服务器的运行模式详解
Jun 03 PHP
浅析php中如何在有限的内存中读取大文件
Jul 02 PHP
php删除数组元素示例分享
Feb 17 PHP
如何实现php图片等比例缩放
Jul 28 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
PHP读取大文件的几种方法介绍
Oct 27 PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
laravel配置Redis多个库的实现方法
Apr 10 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 验证码的实现代码
2011/07/17 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
python中的闭包用法实例详解
2015/05/05 Python
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
详解CSS3的perspective属性设置3D变换距离的方法
2016/05/23 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
幼儿园教师考核制度
2014/02/01 职场文书
大型营销活动计划书
2014/04/28 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang