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 会话(session 时间设定)使用入门代码
Jun 05 PHP
c#中的实现php中的preg_replace
Dec 21 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
Jun 21 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
基于swoole实现多人聊天室
Jun 14 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 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文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript生成SQL查询表单的方法
2015/08/13 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
javascript实现拖放效果
2015/12/16 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python中运行并行任务技巧
2015/02/26 Python
Python基于DES算法加密解密实例
2015/06/03 Python
python executemany的使用及注意事项
2017/03/13 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
python的依赖管理的实现
2019/05/14 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
python实现随机加减法生成器
2020/02/24 Python
python中round函数如何使用
2020/06/19 Python
python如何将图片转换素描画
2020/09/08 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
介绍一下mysql的日期和时间函数
2013/03/28 面试题
工厂仓管员岗位职责
2014/01/01 职场文书
毕业生个人投资创业计划书
2014/01/04 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
《草原的早晨》教学反思
2014/04/08 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
优秀党员推荐材料
2014/12/18 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
Python可视化学习之seaborn调色盘
2022/02/24 Python
SpringBoot整合Minio文件存储
2022/04/03 Java/Android