为什么我需要结束我的ob_start()?

时间:2010-11-08 11:36:18

标签: php ob-start

php文档建议我应该用ob_end_flush()结束每个ob_start()。我在网站的每个页面上使用一个,只是为了允许我在应用程序的任何地方使用firephp日志方法。

该应用程序工作正常,但我想知道是否有任何我不知道可能有害的东西。

3 个答案:

答案 0 :(得分:9)

我认为这个建议的原因是,当不使用ob_end_*函数之一时,PHP会隐式刷新输出缓冲区。虽然不是错误,但可以在不期待它时引起问题。 PHP-docs试图保护您免受这些问题的困扰。如果您知道隐式刷新,则可能不是问题。

答案 1 :(得分:0)

您可以将输出缓冲用作

<?php
ob_start();
echo "Some text you want to echo on page!!";
header("Location:somepage.php");
ob_end_flush();
?>

问题是我们在开始发送输出后无法发送标头。为了解决这个问题,我们缓冲输出。函数ob_start打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本(标头除外)发送输出,而是将输出存储在内部缓冲区中。所以回声输出将被缓冲。接下来我们发送标题没有任何问题,因为我们还没有吐出任何输出。最后,我们调用ob_end_flush来刷新内部缓冲区内容并停止输出缓冲。

答案 2 :(得分:0)

如果存在循环,例如,某些人可以开始缓冲。并调用你的功能。当他试图ob_end_flush代码收集你的内容时。