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 相关文章推荐
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
浅析php中如何在有限的内存中读取大文件
Jul 02 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
PHP利用header跳转失效的解决方法
Oct 24 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
Nginx环境下PHP flush失效的解决方法
Oct 19 PHP
PHP图片水印类的封装
Jul 06 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 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 setTime 设置当前时间的代码
2012/08/27 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
PHP实现倒计时功能
2020/11/16 PHP
经验几则 推荐
2006/09/05 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
使用 Node.js 做 Function Test实现方法
2013/10/25 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
jquery实现两边飘浮可关闭的对联广告
2015/11/27 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
详解angular应用容器化部署
2018/08/14 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
Python实现方便使用的级联进度信息实例
2015/05/05 Python
python动态参数用法实例分析
2015/05/25 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
华为慧通笔试题
2016/04/22 面试题
项目经理岗位职责
2013/11/11 职场文书
美容院考勤制度
2014/01/30 职场文书
优秀大学生求职自荐信范文
2014/04/19 职场文书
责任书范本大全
2015/05/11 职场文书
初二物理教学反思
2016/02/19 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
springcloud整合seata
2022/05/20 Java/Android