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&mysql(六)
Oct 09 PHP
简单的页面缓冲技术
Oct 09 PHP
PHP+MySQL 制作简单的留言本
Nov 02 PHP
简单的移动设备检测PHP脚本代码
Feb 19 PHP
PHP之autoload运行机制实例分析
Aug 28 PHP
Yii学习总结之安装配置
Feb 22 PHP
使用PHPExcel操作Excel用法实例分析
Mar 26 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
PHP get_html_translation_table()函数用法讲解
Feb 16 PHP
php+js实现点赞功能的示例详解
Aug 07 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+dbfile开发小型留言本
2006/10/09 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
2016/10/24 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
详解Vue使用 vue-cli 搭建项目
2017/04/20 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
vue的mixins属性详解
2018/03/14 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
python操作toml文件的示例代码
2020/11/27 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
绝对经典成功的大学生推荐信
2013/11/08 职场文书
社会实践感言
2014/01/25 职场文书
经济管理自荐书
2014/06/09 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
HTML基本元素标签介绍
2022/02/28 HTML / CSS