我有一些正在编写单元测试的类,它们在其中有回声。我想抑制此输出,并认为ob_start()
和ob_clean()
就足够了,但它们没有效果。
public function testSomething (){
ob_start();
$class = new MyClass();
$class->method();
ob_clean();
}
我还尝试了ob_start(false, 0, true);
和ob_end_clean()
等变体,但都无济于事。
我遗漏了什么?
发布于 2011-03-28 23:27:58
你可能想要这样的东西
<?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();
}
?>
发布于 2011-03-28 23:29:26
你在PHP中将implicit_flush设置为true
了吗?这可能会导致您看到的行为,因为它告诉PHP告诉输出层在每个输出块之后自动刷新自己。这相当于在每次调用print()或echo()以及每个HTML块之后调用PHP函数flush()。
发布于 2018-07-23 04:16:02
下面的例子为我解决了这个问题。在不调用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
https://stackoverflow.com/questions/5461175
复制相似问题