php利用ob_start()清除输出和选择性输出的方法

一、背景

有一段代码,因为调用了封装的方法,所以会有一些本来不需要的返回值。这些返回值该怎么处理才能让它消失呢。有的人会说,清除变量不就好了吗?但假如这个返回值无法清除,那又该怎么办呢?

二、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中ob_start()函数的用法
  • php中 ob_start等函数截取标准输出的方法
(0)

相关推荐

  • 解析PHP中ob_start()函数的用法

    ob_start()函数用于打开缓冲区,比如header()函数之前如果就有输出,包括回车/空格/换行/都会有"Header had all ready send by"的错误,这时可以先用ob_start()打开缓冲区PHP代码的数据块和echo()输出都会进入缓冲区而不会立刻输出.当然打开缓冲区的作用很多,只要发挥你的想象.可以总结以下四点: 1.用于header()之前ob_start(); //打开缓冲区 echo /"Hellon/"; //输出 head

  • php中 ob_start等函数截取标准输出的方法

    最近在用PHP在cli下开发一款软件,遇到了这样的问题.我想将PHP脚本中输出的东西收集在一起,于是使用了ob_start和ob_end_flush这两个函数,确实有达到收集输出内容的作用,但同时也将这些打印到了控制台界面中.我想问的是有没有办法,阻止PHP像控制台输出信息.该软件原则上是不允许向控制台打印任何东西的. php-cli本身脱离web服务器执行脚本,我不知道你现在获取到的数据是怎么拿到的?如果你不是通过cli执行php程序返回的值拿到的,那么可以使用ob_get_clean() 他

  • php利用ob_start()清除输出和选择性输出的方法

    一.背景 有一段代码,因为调用了封装的方法,所以会有一些本来不需要的返回值.这些返回值该怎么处理才能让它消失呢.有的人会说,清除变量不就好了吗?但假如这个返回值无法清除,那又该怎么办呢? 二.ob_start() 1.概念: 此函数将打开输出缓冲.当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中. 内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中. 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_fl

  • vue利用v-for嵌套输出多层对象,分别输出到个表的方法

    如下所示: specifications:[ { specificationName:"颜色", specificationItem:[ {value:"黄色"}, {value:"黑色"} ] } ] <table class="table table-bordered table-hover table-item spggdytable" id="ggxtable" v-show="is

  • 动态jsp页面转PDF输出到页面的实现方法

    最近工作中遇到不少问题.总结一下.这段代码主要功能是将一个生成JSP页面转发成PDF输出到页面 需要利用ITEXT String html = ServletUtils.forward(request,response,"/WEB-INF/jsp/depot/print/jhd.jsp"); //转发请求到jsp,返回解析之后的内容而不是输出到浏览器 //System.out.println(html); byte[] pdf = PDFUtils.html2pdf(html); re

  • PHP输出XML格式数据的方法总结

    本文实例讲述了PHP输出XML格式数据的方法.分享给大家供大家参考,具体如下: 方法1: <?php header("Content-type: text/xml"); echo "<?xml version='1.0' encoding='UTF-8'?>"; echo "<users>"; echo "<user>"; echo "<name>";

  • php 读取输出其他文件的实现方法

    如下所示: ob_start(); iconv('utf-8','gb2312',readfile('1.html')); //直接输出文本内容 echo '<hr>'; $data = file_get_contents('./1.html',null,null,0,10); var_dump($data);//输出字符串 echo '<hr>'; $data = file('./1.html'); var_dump($data);//输出数组 echo '<hr>'

  • JS实现读取xml内容并输出到div中的方法示例

    本文实例讲述了JS实现读取xml内容并输出到div中的方法.分享给大家供大家参考,具体如下: note.xml文件结构: <nooo> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> <n

  • php输出控制函数和输出函数生成静态页面

    本文实例为大家分享了php输出控制函数和输出函数生成静态页面的具体代码,供大家参考,具体内容如下 Output Control 函数详解: flush - 刷新输出缓冲 ob_clean - 清空输出缓冲区 ob_end_clean - 清空缓冲区并关闭输出缓冲 ob_end_flush - 冲刷出输出缓冲区内容并关闭缓冲 ob_flush - 冲刷出输出缓冲区中的内容 ob_get_clean - 得到当前缓冲区的内容并删除当前输出缓存 ob_get_contents - 返回输出缓冲区的内容

  • JupyterNotebook 输出窗口的显示效果调整方法

    在使用JupyterNotebook时,经常会遇到输出结果行数过长,结果显示时自动给放进了一个带有滚动条的小窗口.但是我们就是想一次看到全部结果,该怎么办? 其实非常简单,找到上方一排英文的工具栏,点击cell,再点击current outputs,会弹出最终的三个选项,分别是:Toggle.Toggle Scrolling.Clear. 如果你现在的显示效果是有滚动条的,就说明你的选项目前是Toggle Scrolling,想要一下看到全部结果,点击一下Toggle就可以啦. 至于Clear,

  • iOS Xcode8更新后输出log日志关闭的方法

    刚把Xcode更新到最新的8,一运行发现好多log输出,根据如下操作可以关掉这些log日志,点击项目Edit Scheme - Run - Arguments - Environment Variables里添加:Name:OS_ACTIVITY_MODE  Value:disable 如图: 以上所述是小编给大家介绍的iOS Xcode8更新后输出log日志关闭的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • python输出指定月份日历的方法

    本文实例讲述了python输出指定月份日历的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/python import calendar cal = calendar.month(2008, 1) print "Here is the calendar:" print cal; 运行结果如下: Here is the calendar: January 2008 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13

随机推荐