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 相关文章推荐
frename PHP 灵活文件命名函数 frename
Sep 09 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
深入分析PHP引用(&amp;)
Sep 04 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
php筛选不存在的图片资源
Apr 28 PHP
PHP记录页面停留时间的方法
Mar 30 PHP
php 生成Tab键或逗号分隔的CSV
Sep 24 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 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
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
javascript编码的几个方法详细介绍
2013/01/06 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python中setuptools的作用是什么
2020/06/19 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
阿波罗盒子:Apollo Box
2017/08/14 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
EJB的角色和三个对象
2015/12/31 面试题
初级Java程序员面试题
2016/03/03 面试题
大学生大二自我鉴定
2013/10/28 职场文书
道路交通安全实施方案
2014/03/12 职场文书
遗嘱继承公证书
2014/04/09 职场文书
企业法人代表任命书
2014/06/06 职场文书
委托书的格式
2014/08/01 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
志愿者事迹材料
2014/12/26 职场文书
走近毛泽东观后感
2015/06/04 职场文书
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS