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 22 PHP
php include类文件超时问题处理
Feb 06 PHP
php实现四舍五入的方法小结
Mar 03 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
Jan 05 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
详解php框架Yaf路由重写
Jun 20 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
使用PHPExcel导出Excel表
Sep 08 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 PHP
PHP中国际化的字符串排序和比较对象详解
Aug 23 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/06 PHP
js中将字符串转换成json的三种方式
2011/01/12 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
Node.js + Redis Sorted Set实现任务队列
2016/09/19 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
简单介绍Python中的JSON模块
2015/04/08 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
2018/05/08 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Python3的socket使用方法详解
2020/02/18 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
买卖协议书范本
2014/04/21 职场文书
户外活动总结范文
2014/04/30 职场文书
林肯就职演讲稿
2014/05/19 职场文书
诚信承诺书模板
2014/05/26 职场文书
政府法律服务方案
2014/06/14 职场文书
地理科学专业自荐信
2014/09/01 职场文书
活动经费申请报告
2015/05/15 职场文书
婚宴父亲致辞
2015/07/27 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL