php利用ob_start()清除输出和选择性输出的方法


Posted in PHP onJanuary 18, 2018

一、背景

有一段代码,因为调用了封装的方法,所以会有一些本来不需要的返回值。这些返回值该怎么处理才能让它消失呢。有的人会说,清除变量不就好了吗?但假如这个返回值无法清除,那又该怎么办呢?

二、ob_start()

1、概念:

此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。

内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。

来自php手册:http://php.net/manual/zh/function.ob-start.php

2、缓冲区的基本用法

//打开缓冲区
ob_start();
//清除缓冲区中的内容
ob_clean();
//冲刷出(送出)输出缓冲区内容并关闭缓冲
ob_end_flush();

三、基本的测试

1、

echo '1';
ob_start();
echo '2';
ob_clean();

结果: 1

解释:这是最简单的用法,那就是给不想输出内容的外面加上ob_start();,然后再清除缓冲区中的内容,这样就实现了咱们的使用场景。我们可以选择性的输出自己想输出的。去掉自己不想输出的。

2、

echo '1';
ob_start();
echo '2';
//输出缓冲区
ob_end_flush();

结果: 12

3、

//打开缓冲区
ob_start();
echo '1';
//清除缓冲区,此时不会输出1
ob_clean();
//输出缓冲区。但是因为上面已经清除过缓冲区了,所以不会输出 1
ob_end_flush();
echo '2';

结果: 2

4、

ob_start(); //打开缓冲区
echo '1'; 
$a = ob_get_contents(); //输出缓冲区内容到$a,相当于赋值给$a
ob_clean();   //这里清除缓冲区内容
echo '2';    //输出2
echo $a;    //输出$a

结果: 2 1

解释:这里的ob_get_contents();是获取缓冲区的内容。我们可以把获取的内容赋值给一个变量,这样,就算清除了缓冲区,我们输出变量,还是可以正常的输出1的。

四、常用的地方

该函数常用与页面静态化,构造微型web框架能起到很关键的作用,讲渲染好的页面通过输入缓存的方式直接写入到一个文件,这样判断该文件是否存在即可实现用户本次访问需不需要去重新渲染一个页面,也可应用到大型项目中,用nosql去存储渲染好的页面,具体使用方法应人而异,看您喜欢哪种

上面就是我自己做的简单测试。大家有需要的话,可以对照着php手册,多做一些测试。

PHP 相关文章推荐
PHP 飞信好友免费短信API接口开源版
Jul 22 PHP
PHP array 的加法操作代码
Jul 24 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
深入PHP magic quotes的详解
Jun 17 PHP
PHP判断数据库中的记录是否存在的方法
Nov 14 PHP
php多次include后导致全局变量global失效的解决方法
Feb 28 PHP
PHP实现的增强性mhash函数
May 27 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 PHP
php通过header发送自定义数据方法
Jan 18 #PHP
PHP实现从上往下打印二叉树的方法
Jan 18 #PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 #PHP
PHP获取二叉树镜像的方法
Jan 17 #PHP
PHP实现按之字形顺序打印二叉树的方法
Jan 16 #PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
Jan 16 #PHP
PHP实现找出链表中环的入口节点
Jan 16 #PHP
You might like
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
innerText和textContent对比及使用介绍
2013/02/27 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
琳达·法罗眼镜英国官网:Linda Farrow英国
2021/01/19 全球购物
生日宴会答谢词
2014/01/09 职场文书
公司聘任书模板
2014/03/29 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
扬尘污染防治方案
2014/06/15 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL