为什么ob_start()解决了header()错误?

时间:2012-12-05 12:41:53

标签: php

我有一个调用header();的脚本,自从我第一次开始运行脚本以来,它已经工作了好几天。

然后几天后,它开始出错,说它无法修改标题信息。

然后我将ob_start();ob_end_flush();置于谷歌搜索错误并且有效!

错误已经消失,但我的问题是为什么它在没有ob_start();ob_end_flush();的情况下工作几天呢?

我想知道这种行为背后的解释。

不过,我这样打电话给header()

if(condition is true){
header('Location: anotherpage.php');
}

我在开头有一个session_start();

3 个答案:

答案 0 :(得分:2)

以前,标题行之前没有非标题输出。现在,在标题行之前有非标题输出。这只有在输出被缓冲时才有效,所以标题实际上可以在它之前输出。

答案 1 :(得分:1)

您无法在标题前输出任何数据!

ob_start()是一个输出缓冲区,它将缓冲所有回显数据并在所有标题之后打印出来。

PHP在脚本自动完成时刷新数据,因此不需要“ob_end_flush()”

答案 2 :(得分:1)

在调用header()之前,您有一些代码输出内容。它可以是printecho或类似的陈述,甚至是<?php之前的空格。

ob_start导致错误消失的原因是因为它导致任何输出被缓冲,因此在您调用ob_flush之前一直推迟。

这样就可以保证标题会在内容之前出现,即使你弄乱了代码中命令的顺序。