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 相关文章推荐
PHP4实际应用经验篇(7)
Oct 09 PHP
php生成随机颜色的方法
Nov 13 PHP
Laravel 5框架学习之向视图传送数据
Apr 08 PHP
PHP安装memcached扩展笔记
May 28 PHP
详解PHP中的PDO类
Jul 06 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
PHP框架Laravel学习心得体会
Oct 28 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
详解php中反射的应用
Mar 15 PHP
Symfony2实现从数据库获取数据的方法小结
Mar 18 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
thinkPHP5框架接口写法简单示例
Aug 05 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
使用Apache的rewrite技术
2006/06/22 PHP
4.与数据库的连接
2006/10/09 PHP
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
php中session定期自动清理的方法
2015/11/12 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
玩转Koa之koa-router原理解析
2018/12/29 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
Ubuntu下安装PyV8
2016/03/13 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
python怎么对数字进行过滤
2020/07/05 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
技能比赛获奖感言
2014/02/14 职场文书
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
2015新年寄语大全
2014/12/08 职场文书
Python Pandas知识点之缺失值处理详解
2021/05/11 Python
Mysql中存储引擎的区别及比较
2021/06/04 MySQL
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技