PHP中对缓冲区的控制实现代码


Posted in PHP onSeptember 29, 2013

大家在使用PHP的过程中不免要使用到header和setcookie两个函数,这两个函数会发送一段文件头信息给浏览器,但是如果在使用这两个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错,提示信息如下:“Header had all ready send by”!那有什么方法可以在有了输出的情况下面在发送文件头信息呢?在PHP 4.0里面加入了缓冲区控制的几个函数,使用这些函数可以帮我们解决很多问题。

一、 相关函数简介:

1、Flush:输出缓冲区内的内容并且删除缓冲区。

函数格式:flush()

说明:这个函数经常使用,效率很高。

2、ob_start :打开输出缓冲区

函数格式:void ob_start(void)

说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或者使用ob_end_clean()来输出缓冲区的内容。

3 、ob_get_contents :返回内部缓冲区的内容。

使用方法:string ob_get_contents(void)

说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。

4、ob_get_length:返回内部缓冲区的长度。

使用方法:int ob_get_length(void)

说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。

5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。

使用方法:void ob_end_flush(void)

说明:这个函数发送输出缓冲区的内容(如果有的话)。

6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区

使用方法:void ob_end_clean(void)

说明:这个函数不会输出内部缓冲区的内容!

7、ob_implicit_flush:打开或关闭绝对刷新

使用方法:void ob_implicit_flush ([int flag])

说明:使用过Perl的人都知道?$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出。

二、使用例子:

在一开始,笔者说了用缓冲区控制的函数可以防止文件头发送信息出错,下面就是一个例子:

<? //PHP提示符
ob_start(); //打开缓冲区
echo "Hello/n"; //输出
header('location:gotourl.php'); //把浏览器重定向到gotourl.php
?>

如果去掉ob_start,PHP就会提示在文件的第4行出错(出错信息如前面所示),但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!

下面再给出一个很经典的用途:

比如你用<?phpinfo();?>得到服务器和客户端的设置信息,但是这个信息会因为客户端的不同而不同,如果想要保存phpinfo()函数的输出怎么办呢?在没有缓冲区控制之前,可以说一点办法也没有,但是有了缓冲区的控制,我们可以轻松的解决:

<?
ob_start(); //打开缓冲区
phpinfo(); //使用phpinfo函数
?$info=ob_get_contents(); //得到缓冲区的内容并且赋值给?$info
?$file=fopen('info.txt','w'); //打开文件info.txt
fwrite(?$file,?$info); //写入信息到info.txt
fclose(?$file); //关闭文件info.txt
?>

用以上的方法,就可以把不同用户的phpinfo信息保存下来,这在以前恐怕没有办法办到!其实上面就是将一些“过程”转化为“函数”的方法!

PHP 相关文章推荐
php 数组的一个悲剧?
May 11 PHP
基于php伪静态的实现详细介绍
Apr 28 PHP
Codeigniter注册登录代码示例
Jun 12 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
php使用function_exists判断函数可用的方法
Nov 19 PHP
PHP文件缓存类示例分享
Jan 30 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
php常量详细解析
Oct 27 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
Yii框架用户登录session丢失问题解决方法
Jan 07 PHP
PHP验证码函数代码(简单实用)
Sep 29 #PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 #PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 #PHP
PHP无限分类(树形类)
Sep 28 #PHP
PHP的PSR规范中文版
Sep 28 #PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 #PHP
php中time()和mktime()方法的区别
Sep 28 #PHP
You might like
PHP用户指南-cookies部分
2006/10/09 PHP
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
python基础教程之缩进介绍
2014/08/29 Python
python中字典dict常用操作方法实例总结
2015/04/04 Python
Python中用format函数格式化字符串的用法
2015/04/08 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
Django中Model的使用方法教程
2018/03/07 Python
pandas实现选取特定索引的行
2018/04/20 Python
Django中create和save方法的不同
2019/08/13 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
股权收购意向书
2014/04/01 职场文书
土地转让协议书范本
2014/04/15 职场文书
2014年路政工作总结
2014/12/10 职场文书
庐山导游词
2015/02/03 职场文书
新学期感想
2015/08/10 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
HTML+VUE分页实现炫酷物联网大屏功能
2021/05/27 Vue.js
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python