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新手上路(六)
Oct 09 PHP
深入解析php中的foreach函数
Aug 31 PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 PHP
php使用post数组的键值创建同名变量并赋值的方法
Apr 03 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
PHP MSSQL 分页实例
Apr 13 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
PHP代码审核的详细介绍
2013/06/13 PHP
php数组编码转换示例详解
2014/03/11 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
js数组如何添加json数据及js数组与json的区别
2015/10/27 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
2016/06/06 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
js仿淘宝放大镜效果
2020/12/28 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
python通过函数属性实现全局变量的方法
2015/05/16 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
对python中的logger模块全面讲解
2018/04/28 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
Python面向对象实现方法总结
2020/08/12 Python
Python实现异步IO的示例
2020/11/05 Python
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
试述DBMS的主要功能
2016/11/13 面试题
网站设计师的岗位职责
2013/11/21 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
个人买房协议书范本
2014/10/06 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
图神经网络GNN算法
2022/05/11 Python