彻底杜绝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中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
php array的学习笔记
May 10 PHP
php中explode与split的区别介绍
Oct 03 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 PHP
PHP判断远程图片或文件是否存在的实现代码
Feb 20 PHP
PHP下载远程文件到本地存储的方法
Mar 24 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
php递归遍历多维数组的方法
Apr 18 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
Yii框架连表查询操作示例
Sep 06 PHP
PHP基于进程控制函数实现多线程
Dec 09 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
关于页面优化和伪静态
2009/10/11 PHP
微信支付扫码支付php版
2016/07/22 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
JavaScript学习笔记(十)
2010/01/17 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
利用js判断手机是否安装某个app的多种方案
2017/02/13 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
详解如何运行vue项目
2019/04/15 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
Flask实现图片的上传、下载及展示示例代码
2018/08/03 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
消防安全检查制度
2014/02/04 职场文书
团队激励口号
2014/06/06 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
2014年接待工作总结
2014/11/26 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏