2

自从我第一次开始运行脚本以来,我有一个可以调用的脚本,并且可以header();正常运行几天。

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

然后我在谷歌上搜索错误并且它有效ob_start();ob_end_flush();

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

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

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

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

我一session_start();开始有一个。

4

3 回答 3

2

以前,您在标题行之前没有非标题输出。现在,您在标题行之前有非标题输出。这仅在输出被缓冲时才有效,因此标题可以在它之前实际输出。

于 2012-12-05T12:45:06.817 回答
1

你有一些代码在header()被调用之前输出一些东西。它可以是print,echo或类似的语句,甚至是 . 之前的空格<?php

导致错误消失的原因ob_start是因为它会导致任何输出被缓冲,因此推迟到您调用ob_flush.

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

于 2012-12-05T12:46:16.097 回答
1

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

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

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

于 2012-12-05T12:45:26.767 回答