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 相关文章推荐
数字转英文
Dec 06 PHP
PHP中static关键字以及与self关键字的区别
Jul 01 PHP
分享3个php获取日历的函数
Sep 25 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
PHP生成静态HTML文档实现代码
Jun 23 PHP
php出租房数据管理及搜索页面
May 23 PHP
phpcms配置列表页以及获得文章发布时间
Jul 04 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
php命令行写shell实例详解
Jul 19 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 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/02/03 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
jQuery实现移动端滑块拖动选择数字效果
2015/12/24 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
JS实现li标签的删除
2019/04/12 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
利用Python校准本地时间的方法教程
2019/10/31 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
Python自动创建Excel并获取内容
2020/09/16 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
购买原创艺术品:Zatista
2019/11/09 全球购物
普通简短的个人自我评价
2014/02/15 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
机械工程师岗位职责
2014/06/16 职场文书
生物工程专业求职信
2014/09/03 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
迎新生标语大全
2014/10/06 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python