ob_start打开输出缓冲(Output Buffering Control)

我是在使用WooCommerce的时候出现了这样的问题。因为WooCommerce中大量使用html直接输出,导致我写的shortcode引用模板文件时,会出现html不在短代码所在位置的问题。

因为Output Buffering Control整个过程比较简单,下面按照文档,简单记录下ob_start的用法。

以下抄自文档

此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。

就是说你echo和print的内容,以及直接写的html会被临时存在另一个地方,最明显的好处就是,html在缓存以后,是可以赋值给变量的。然后通过拼接后再输出出来。

<?php
function ob_test_template(){
	$a = 'test';
?>
	<div style ="background:red;"><?php echo $a;?></div>

<?php
}
?>
<div style="border:1px solid #333;width: 40px;">
<?php ob_test_template();?>
</div>


<?php
ob_start();
ob_test_template();
$tpl = ob_get_contents();
ob_end_clean();
$html = '<div style="border:1px solid #333;width: 40px;">';
$html .= $tpl;
$html .= '</div>';
echo $html;

上面的例子中,我们有个function里面是直接输出的html,如果想拼接他,我们不得不使用html和他拼接。这样,在输出中会非常不便。使用缓冲控制这种感觉就很好,全是php了。当然  上面一也可以一点点的输出,把变量echo出来,然后进缓冲。

缓冲这里就像一张草稿一样,你筛选了合适的内容,然后一次性输出。

下面是方法,为了查找方便。

  • flush — 刷新输出缓冲
  • ob_clean — 清空(擦掉)输出缓冲区
  • ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲
  • ob_end_flush — 冲刷出(送出)输出缓冲区内容并关闭缓冲
  • ob_flush — 冲刷出(送出)输出缓冲区中的内容
  • ob_get_clean — 得到当前缓冲区的内容并删除当前输出缓。
  • ob_get_contents — 返回输出缓冲区的内容
  • ob_get_flush — 刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。
  • ob_get_length — 返回输出缓冲区内容的长度
  • ob_get_level — 返回输出缓冲机制的嵌套级别
  • ob_get_status — 得到所有输出缓冲区的状态
  • ob_gzhandler — 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数。ob_start callback function to gzip output buffer
  • ob_implicit_flush — 打开/关闭绝对刷送
  • ob_list_handlers — 列出所有使用中的输出处理程序。
  • ob_start — 打开输出控制缓冲
  • output_add_rewrite_var — 添加URL重写器的值(Add URL rewriter values)
  • output_reset_rewrite_vars — 重设URL重写器的值(Reset URL rewriter values)

猜你喜欢

转载自blog.csdn.net/wwx890208/article/details/83475640
今日推荐