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 相关文章推荐
第二节--PHP5 的对象模型
Nov 16 PHP
PHP 选项及相关信息函数库
Dec 04 PHP
cmd下运行php脚本
Nov 25 PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 PHP
PHP中读写文件实现代码
Oct 20 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
Linux系统下PHP-FPM的安装和配置教程
Aug 17 PHP
详解HTTP Cookie状态管理机制
Jan 14 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 PHP
php校验公钥是否可用的实例方法
Sep 17 PHP
php操作redis数据库常见方法实例总结
Feb 20 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 curl参数的详解
2013/06/17 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
python实现超简单端口转发的方法
2015/03/13 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
全面解析Python的While循环语句的使用方法
2015/10/13 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
详解Python装饰器由浅入深
2016/12/09 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
python 实现图像快速替换某种颜色
2020/06/04 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
C#面试问题
2016/07/29 面试题
不假外出检讨书
2014/01/27 职场文书
小学教师师德反思
2014/02/03 职场文书
卫生巾广告词
2014/03/18 职场文书
后勤个人工作总结
2015/02/28 职场文书
运动会主持人开幕词
2016/03/04 职场文书
PHP RabbitMQ消息列队
2022/05/11 PHP
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers