2012-12-05 70 views
2

我有一个脚本,调用了header();,并且自我第一次运行该脚本以来,它已经运行了两天。为什么ob_start()解决了header()错误?

然后几天后,它开始有一个错误,说它不能修改标题信息。

然后我把ob_start();ob_end_flush();谷歌搜索错误,它的工作原理!

错误已经消失,但我的问题是,为什么它在几天前没有ob_start();ob_end_flush();

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

顺便说一句,我叫header()这样:

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

和我在开始时有一个session_start();

+1

你需要在这里粘贴你的代码。 –

+0

检查此:http://php.net/manual/en/function.ob-start.php –

+0

它开始失败,因为你试图在'header();之前输出的东西? – SpacedMonkey

回答

2

以前,在标题行之前没有非标题输出。现在,您在标题行之前有非标题输出。这只有在输出被缓冲时才能起作用,因此头可以在其之前实际输出。

+0

对我来说这很有意义,这也许是原因。感谢 – anagnam

1

您不能在标题之前输出任何数据!

ob_start()是输出缓冲区,将缓冲所有回送的数据和所有页眉等

PHP刷新时,所以没有需要的脚本自动完成数据后打印“ob_end_flush()函数”

1

在调用header()之前,您有一些代码输出内容。它可以是print,echo或类似声明,或者是<?php之前的空白区域。

ob_start导致错误消失的原因是因为它会导致任何输出被缓冲,因此直到您拨打ob_flush时才会被屏蔽。

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

+0

它对我有意义。感谢您的解释 – anagnam

相关问题