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与SQL注入攻击[三]
Apr 17 PHP
php+mysql开源XNA 聚合程序发布 下载
Jul 13 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
php采集中国代理服务器网的方法
Jun 16 PHP
Smarty分页实现方法完整实例
May 11 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
2016/07/12 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
js实现密码强度检验
2017/01/15 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
python圣诞树编写实例详解
2020/02/13 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
学习党课思想汇报
2013/12/29 职场文书
母亲节演讲稿范文
2014/01/02 职场文书
超市端午节活动方案
2014/01/23 职场文书
集中采购方案
2014/06/10 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
文明家庭事迹材料
2014/12/20 职场文书
五一劳动节慰问信
2015/02/14 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
企业团队精神心得体会
2016/01/19 职场文书
Redis实现分布式锁的五种方法详解
2022/06/14 Redis