Php 我应该使用输出缓冲(ob_start)还是不使用

Php 我应该使用输出缓冲(ob_start)还是不使用,php,output-buffering,ob-start,Php,Output Buffering,Ob Start,在发现输出缓冲表示糟糕的编码模式后,我修改了PHP代码,以避免使用输出缓冲。但我仍然在不可避免地需要它的地方使用它 但是,一些文章说,使用输出缓冲是有益的,因为它将输出合并为一个,默认情况下,输出分别被分解为html和标题,然后显示在浏览器上,但输出缓冲消除了这种分解过程,从而提高了最终用户的输出显示速度 所有这篇文章的内容让我进退两难,无法使用或完全避免输出缓冲。我不确定我是否完全正确的工作和我提到的要点。 因此,请给我相应的指导。有时使用输出缓冲是一件好事,但像许多人那样使用它(例如,在输出

在发现输出缓冲表示糟糕的编码模式后,我修改了PHP代码,以避免使用输出缓冲。但我仍然在不可避免地需要它的地方使用它

但是,一些文章说,使用输出缓冲是有益的,因为它将输出合并为一个,默认情况下,输出分别被分解为html和标题,然后显示在浏览器上,但输出缓冲消除了这种分解过程,从而提高了最终用户的输出显示速度

所有这篇文章的内容让我进退两难,无法使用或完全避免输出缓冲。我不确定我是否完全正确的工作和我提到的要点。
因此,请给我相应的指导。

有时使用输出缓冲是一件好事,但像许多人那样使用它(例如,在输出之前不必发送头的惰性方法)并不合适

你举的例子,我不太了解,但如果它是最佳的,它可能是一个好的使用时机。
并非禁止使用
ob_start()
,只是我前面提到的使用方法是“错误的”

您提到的优化感觉像是一个非常低级的优化,您可能会得到一点“更快”的输出,但通常在一个标准php脚本中有很多其他优化,可以在值得一看之前加速它

编辑: 输出前不使用发送头的小脚本与使用发送头的小脚本的示例:

<?php
$doOutput = true;
$doRedirect = true;
$output = "";
if($doOutput == true){ 
    // $doOutput is true, so output is supposed to be printed.
    $output = "Some output yay!";
}
if($doRedirect == true){ 
    // but $doRedirect is also true, so redirect will be done.
    header("location:anotherpage.php");  // This will not produce an error cause there was no output!
    exit();
}
// The echo below will not be printed in the example, cause the $doRedirect var was true.
echo $output;

好的,先生,当我使用它的时候,我会把它放在我脚本的顶部,作为我所有php脚本文件的第一行……这对不对?还有别的出路吗?使用它的正确方法是什么。如果可能的话,请给我详细的指导。我真的被卡住了。好吧,这取决于你为什么把它放在所有文件的顶部!是因为您收到“输出后无法发送标题”(或类似)消息吗?然后我会推荐代码中的另一种方法。我从未遇到过在输出之后必须发送头的情况。嗯,在重定向之前不要做任何输出。不需要它,因为如果重定向,用户无论如何都看不到任何输出。你可以举个例子;将所有数据存储在变量中,并在到达脚本的“输出部分”时回显它们(这将在发送头之后,也就是说,如果不发送头,则实际回显输出)。好的,先生,我会将重定向代码移到html上方,从而删除输出缓冲usageRight,更新了一个更明显的示例和注释。希望它更清楚:P
<?php
$doOutput = true;
$doRedirect = true; 
if($doOutput == true){ 
    //Output will be printed, cause $doOutput is true.
    echo "Some output yay!";
}
if($doRedirect == true){ 
    // but $doRedirect is also true, so redirect will be done.
    header("location:anotherpage.php");  // This will produce an error cause output was already printed.
    exit();
}