无论缓冲区设置如何,PHP命令行输出缓冲区输出

时间:2011-03-28 15:20:04

标签: php output-buffering

我有一些课程,我正在编写单元测试,其中有回声。我想抑制此输出,并认为ob_start()ob_clean()就足够了,但它们没有效果。

public function testSomething (){
    ob_start();
    $class = new MyClass();
    $class->method();
    ob_clean();
}

我也尝试过诸如ob_start(false, 0, true);ob_end_clean()之类的变体无效。

我错过了什么?

3 个答案:

答案 0 :(得分:2)

你可能想要这样的东西

<?php
public function testSomething (){
    ob_start();
    ob_implicit_flush(false); // turn off implicit flush

// Make your output below
    $class = new MyClass();
    $class->method();
// End of output

// store output into variable:
    $output = ob_get_contents();
}
?>

答案 1 :(得分:0)

你的PHP ini中有implicit_flush设置为true吗?这可能会导致您看到的行为,因为它告诉PHP告诉输出层在每个输出块后自动刷新自身。这相当于在每次调用print()或echo()以及每个HTML块之后调用PHP函数flush()。

答案 2 :(得分:0)

以下内容为我解决了这个问题。在不调用ob_end_clean()的情况下,缓冲区的内容将一直保留到脚本结束(在刷新脚本之前)。

ob_implicit_flush(false);
ob_start();    
/*
  ...
  ... do something that pushes countent to the output buffer
  ...
*/    
$rendered = ob_get_contents();
ob_end_clean(); // Needed to clear the buffer