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 Google的translate API代码
Dec 10 PHP
判断PHP数组是否为空的代码
Sep 08 PHP
yii框架builder、update、delete使用方法
Apr 30 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
PHP的error_reporting错误级别变量对照表
Jul 08 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
使用PHPExcel操作Excel用法实例分析
Mar 26 PHP
基于PHP实现等比压缩图片大小
Mar 04 PHP
php结合md5的加密解密算法实例
Sep 30 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
php解决安全问题的方法实例
Sep 19 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
MVC模式的PHP实现
2006/10/09 PHP
小偷PHP+Html+缓存
2006/11/25 PHP
php导入模块文件分享
2015/03/17 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
js中获取键盘事件的简单实现方法
2016/10/10 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
python实现的重启关机程序实例
2014/08/21 Python
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
高中生毕业自我鉴定
2013/10/10 职场文书
心得体会开头
2014/01/01 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
供应链金融服务方案
2014/05/25 职场文书
中职生自荐信范文
2014/06/15 职场文书
买房协议书范本
2014/10/23 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
确保工程质量承诺书
2015/04/29 职场文书
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript