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开发文件系统实例讲解
Oct 09 PHP
Dedecms常用函数解析
Feb 01 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
PHP读取RSS(Feed)简单实例
Jun 12 PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 PHP
PHP.ini安全配置检测工具pcc简单介绍
Jul 02 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
PHP join()函数用法与实例讲解
Mar 11 PHP
调试php程序的简单步骤
Oct 04 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的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
PHP生成器简单实例
2015/05/13 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
PHP对象实例化单例方法
2017/01/19 PHP
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
Vue组件BootPage实现简单的分页功能
2016/09/12 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
基于Two.js实现星球环绕动画效果的示例
2017/11/06 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
python抓取网页中图片并保存到本地
2015/12/01 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
Python控制Firefox方法总结
2019/06/03 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
python3注册全局热键的实现
2020/03/22 Python
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
2013/07/19 HTML / CSS
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
档案保密承诺书
2014/06/03 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
公司放假通知怎么写
2015/04/15 职场文书
小学思品教学反思
2016/02/20 职场文书
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS