彻底杜绝PHP的session cookie错误


Posted in PHP onAugust 09, 2009

只要你写过PHP代码,相信都遇上过这个大多时候都令人莫明其妙的warning吧..今天我们就来搞定它...............

看了PHP手册,回答如下:

消息“Warning: Cannot send session cookie - headers already sent。。。”或者“Cannot add header information - headers already sent。。。”。

函数 header(),setcookie() 和 session 函数需要在输出流中增加头信息。但是头信息只能在其它任何输出内容之前发送。在使用这些函数前不能有任何(如 HTML)的输出。函数 headers_sent() 能够检查您的脚本是否已经发送了头信息。请参阅“输出控制函数”。

意思是:不要在使用上面的函数前有任何文字,空行,回车,空格等。但。。。问题是,这答案并不令人满意。因为往往程序在其他PHP环境下运行却正常。

首先:这错误是怎么产生的呢?让我们来看看PHP是如何处理HTTP header输出和主体输出的。

PHP脚本开始执行时,它可以同时发送header(标题)信息和主体信息。 Header信息(来自 header() 或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中。 这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type 标题)。但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print() 调用),那么PHP就必须先发送完所有的Header,然后终止 HTTP header。而后继续发送主体数据。从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。

好!那我们来解决它:

笨方法:把错误警告全不显示!

掩耳盗铃之计,具体方法就不说了 ^_^#

解决方案:

1)适用于有权限编辑PHP。INI的人

打开php。ini文件(你应试比我清楚你的php。ini在哪里),找到

output_buffering =改为on或者任何数字。如果是IIS6,请一定改为ON,不然你的PHP效率会奇慢。

2)使用虚拟主机,不能编辑PHP。INI,怎么办?

简单:

在你的空间根目录下建立一个。htaccess文件,内容如下:

AllowOverride All

PHP_FLAG output_buffering On

不幸的情况是:还是不行?全部网页都不能显示啦?

那么,你可以打电话骂一通空间商,然后让他给你把apache的。htaccess AllowOverride打开

3)在PHP文件里解决

ob_start()

启用output buffering机制。 Output buffering支持多层次 -- 例如,可以多次调用 ob_start() 函数。

ob_end_flush()

发送output buffer(输出缓冲)并禁用output buffering机制。

ob_end_clean()

清除output buffer但不发送,并禁用output buffering。

ob_get_contents()

将当前的output buffer返回成一个字符串。允许你处理脚本发出的任何输出。

原理:

output_buffering被启用时,在脚本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只能在PHP 4。0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为header实际上并没有发送。当全部脚本终止时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。

PHP 相关文章推荐
高亮度显示php源代码
Oct 09 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
php cookie的操作实现代码(登录)
Dec 29 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
Jul 02 PHP
php比较两个绝对时间的大小
Jan 31 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
destoon后台网站设置变成空白的解决方法
Jun 21 PHP
php网页病毒清除类
Dec 08 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
PHP 搜索查询功能实现
Nov 29 PHP
php微信公众号开发之图片回复
Oct 20 PHP
PHP 5.3.0 安装分析心得
Aug 07 #PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 #PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
Aug 07 #PHP
PHP 翻页 实例代码
Aug 07 #PHP
php Sql Server连接失败问题及解决办法
Aug 07 #PHP
php_xmlhttp 乱码问题解决方法
Aug 07 #PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 #PHP
You might like
图象函数中的中文显示
2006/10/09 PHP
PHP开发负载均衡指南
2010/07/17 PHP
用PHP书写安全的脚本代码
2012/02/05 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
django静态文件加载的方法
2018/05/20 Python
Python下opencv图像阈值处理的使用笔记
2019/08/04 Python
基于python plotly交互式图表大全
2019/12/07 Python
python用700行代码实现http客户端
2021/01/14 Python
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
数控机床专业自荐信
2014/05/19 职场文书
李强为自己工作观后感
2015/06/11 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
Python开发五子棋小游戏
2022/05/02 Python