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执行zip与rar解压缩方法实现代码
Dec 05 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
怎样使用php与jquery设置和读取cookies
Aug 08 PHP
PHP实现变色验证码实例
Jan 06 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
thinkPHP中分页用法实例分析
Dec 26 PHP
Smarty环境配置与使用入门教程
May 11 PHP
php源码 fsockopen获取网页内容实例详解
Sep 24 PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
Oct 16 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 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
javascript实现密码强度显示
2015/03/18 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
用Python生成器实现微线程编程的教程
2015/04/13 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
幼儿如何来做好自我评价
2013/11/05 职场文书
外企求职信范文分享
2013/12/31 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
党员公开承诺事项
2014/03/25 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
2014国庆节演讲稿:祖国在我心中(400字)
2014/09/25 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
美术教师个人工作总结
2015/02/06 职场文书
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python