彻底杜绝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获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
Dec 28 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
php抽奖小程序的实现代码
Jun 18 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
Oct 09 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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
PHP 读取Postgresql中的数组
2013/04/14 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
php使用PDO方法详解
2014/12/27 PHP
js tab 选项卡
2009/04/26 Javascript
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
python 使用get_argument获取url query参数
2017/04/28 Python
Python实现自动上京东抢手机
2018/02/06 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
英国现代、当代和设计师家具店:Furntastic
2020/07/18 全球购物
岗位竞聘书范文
2014/03/31 职场文书
我的小天地教学反思
2014/04/30 职场文书
大学学生个人总结
2015/02/15 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang