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新手谈谈我的学习心得
Feb 25 PHP
php日历[测试通过]
Mar 27 PHP
php防攻击代码升级版
Dec 29 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
php商品对比功能代码分享
Sep 24 PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 23 PHP
Centos7安装swoole扩展操作示例
Mar 26 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学习 运算符与运算符优先级
2008/06/15 PHP
让PHP支持断点续传的源码
2010/05/16 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
Python基础教程之正则表达式基本语法以及re模块
2016/03/25 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
python用requests实现http请求代码实例
2019/10/31 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
文秘自荐信
2013/10/20 职场文书
小学生打架检讨书
2014/01/26 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
论文诚信承诺书
2014/05/23 职场文书
民事赔偿协议书
2014/11/02 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
紧急通知
2015/04/17 职场文书
永远是春天观后感
2015/06/12 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
python如何为list实现find方法
2022/05/30 Python