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 基于文件头的文件类型验证类函数
May 01 PHP
php中apc缓存使用示例
Dec 25 PHP
win7计划任务定时执行PHP脚本设置图解
May 09 PHP
PHP微框架Dispatch简介
Jun 12 PHP
php实现文本数据导入SQL SERVER
May 17 PHP
php获取json数据所有的节点路径
May 17 PHP
PHP中Session和Cookie是如何操作的
Oct 10 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
Apr 10 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 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跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
js表单验证实例讲解
2016/03/31 Javascript
值得分享的JavaScript实现图片轮播组件
2016/11/21 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
python flask实现分页效果
2017/06/27 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
python实现验证码识别功能
2018/06/07 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
运动会广播稿30字
2014/01/21 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
遗失说明具结保证书
2015/02/26 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书