如何检查在php中是否回显了某些内容?

问题描述:

我正在开发一个基于一些自定义CMS的项目,其中当我打电话时,CMS模块将返回显示块。这些块是使用我在不同文件中定义的自定义函数绘制的。当然,ob_start()已用于CMS本身以保留输出字符串。现在,正如我所看到的,只有在满足某些条件(例如日期)时,才会绘制一些内部块(由CMS模块调用的函数绘制)。因此,在某些情况下,由于被调用函数没有任何回声,因此只绘制块的外部包装(div)。现在,我想通过检查函数是否回应某些东西来编辑该模块。我的问题是,我不能使用这样的事情:如何检查在php中是否回显了某些内容?

 $temp = ob_get_contents(); 
    ob_flush(); 
    ob_start(); 
    eval(trim($block->detail));//this is where custom function is called in module 
    $block = ob_get_contents(); 
    ob_flush(); 
    ob_start(); 
    echo $temp; 
    if($block) 
    { 
     echo $start.$block.$end;//$start and $end contains div wrapper html 
    } 

的原因是,这VIEW模块称为相同的组件内多次绘制根据不同的条件块。像上面所做的那样,多次绘制以前回显的html(在调用视图模块之前)。我仍然坚持如何避免同一个html的多次回显。 我知道这个问题有点复杂,但任何帮助将非常感激。

+0

您不必刷新之前的OB _...,你可以将多个ob_start()一起嵌套! – Gerifield 2014-09-06 12:29:50

+0

会跳过缓冲已经缓冲的通用输出吗? – Sayed 2014-09-06 12:30:57

+0

是的! http://php.net/manual/en/function.ob-start.php “输出缓冲区是可堆叠的,也就是说,当另一个ob_start()处于活动状态时,您可以调用ob_start(),只要确保调用ob_end_flush ()适当的次数,如果多个输出回调函数处于活动状态,那么输出将按照嵌套顺序依次过滤。“ – Gerifield 2014-09-06 12:31:27

我会在这里写一个真实的答案。 就像我说的,你可以将多个ob_start()嵌套在一起。

检查php.net手册:http://php.net/manual/en/function.ob-start.php 发出警告消息后。

输出缓冲区是可堆叠的,也就是说,您可以在另一个ob_start()处于活动状态时调用ob_start()。只要确保你调用了ob_end_flush()适当的次数。如果多个输出回调函数处于活动状态,则将按照嵌套顺序依次对输出进行过滤。

所以,你的代码可能是:

ob_start(); 
eval(trim($block->detail)); 
$block = ob_get_contents(); 
ob_end_clean(); 
if($block){ 
    echo $start.$block.$end; 
} 

而这一切,你不必停止并重新启动输出缓冲器。

编辑:

或者你甚至可以离开ob_end_clean()http://php.net/manual/en/function.ob-get-clean.php

像这样:

ob_start(); 
eval(trim($block->detail)); 
$block = ob_get_clean(); 
if($block){ 
    echo $start.$block.$end; 
} 
+0

让我检查..只需一分钟。 – Sayed 2014-09-06 12:59:57

+0

布局变得扭曲或可能我错过了一些东西,所以我要把它标记为答案.. :) – Sayed 2014-09-06 13:06:01