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基础知识:函数基础知识
Dec 13 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
PHP图像处理类库MagickWand用法实例分析
May 21 PHP
php计算整个目录大小的方法
Jun 19 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
laravel Model 执行事务的实现
Oct 10 PHP
TP5框架安全机制实例分析
Apr 05 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 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包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
浅谈Javascript如何实现匀速运动
2014/12/19 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
在Python中使用列表生成式的教程
2015/04/27 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
python 图像平移和旋转的实例
2019/01/10 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
2019/10/11 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
铭立家具面试题
2012/12/06 面试题
管理失职检讨书
2014/02/12 职场文书
婚礼主持结束词
2014/03/13 职场文书
建筑结构施工求职信
2014/07/11 职场文书
安全检查汇报材料
2014/12/26 职场文书
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
Python 键盘事件详解
2021/11/11 Python
SQL SERVER存储过程用法详解
2022/02/24 SQL Server