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实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
discuz安全提问算法
Jun 06 PHP
几个php应用技巧
Mar 27 PHP
php $_ENV为空的原因分析
Jun 01 PHP
php中去除所有js,html,css代码
Oct 12 PHP
php编程实现获取excel文档内容的代码实例
Jun 28 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
php限制文件下载速度的代码
Oct 20 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
php基于协程实现异步的方法分析
Jul 17 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
在数据量大(超过10万)的情况下
2007/01/15 PHP
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
使用js画图之饼图
2015/01/12 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
JavaScript错误处理
2015/02/03 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
在Python程序中操作MySQL的基本方法
2015/07/29 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
python中Apriori算法实现讲解
2017/12/10 Python
python实时监控cpu小工具
2018/06/21 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
百度软件工程师职位
2013/02/14 面试题
村优秀党员事迹材料
2014/01/15 职场文书
法制宣传日活动总结
2014/04/29 职场文书
村支部书记群众路线对照检查材料思想汇报
2014/10/08 职场文书
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技
Windows server 2012搭建FTP服务器
2022/04/29 Servers