【发布时间】:2010-11-08 11:36:18
【问题描述】:
php 文档建议我应该以 ob_end_flush() 结束每个 ob_start()。我在网站的每个页面上都使用一个,只是为了允许我在应用程序的任何位置使用 firephp 日志方法。
该应用程序运行良好,但我想知道是否有任何我不知道的可能有害的东西。
【问题讨论】:
php 文档建议我应该以 ob_end_flush() 结束每个 ob_start()。我在网站的每个页面上都使用一个,只是为了允许我在应用程序的任何位置使用 firephp 日志方法。
该应用程序运行良好,但我想知道是否有任何我不知道的可能有害的东西。
【问题讨论】:
我认为这个建议的原因是,当不使用ob_end_* 函数之一时,PHP 会隐式刷新您的输出缓冲区。虽然这不是错误,但 可能会在意料之外的情况下导致问题。 PHP 文档试图保护您免受此类问题的影响。如果您知道隐式刷新,这可能不是问题。
【讨论】:
您可以将输出缓冲用作
<?php
ob_start();
echo "Some text you want to echo on page!!";
header("Location:somepage.php");
ob_end_flush();
?>
问题是我们开始发送输出后无法发送标头。为了解决这个问题,我们缓冲输出。函数 ob_start 打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本发送输出(除了标题),而是将输出存储在内部缓冲区中。所以回显输出将被缓冲。接下来我们发送标题没有任何问题,因为我们还没有吐出任何输出。最后我们调用 ob_end_flush 来刷新内部缓冲区内容并停止输出缓冲。
【讨论】:
如果有循环,例如,有人可以开始缓冲。并调用你的函数。当他试图 ob_end_flush 代码收集你的内容时。
【讨论】: