我有一个调用header();
的脚本,自从我第一次开始运行脚本以来,它已经工作了好几天。
然后几天后,它开始出错,说它无法修改标题信息。
然后我将ob_start();
和ob_end_flush();
置于谷歌搜索错误并且有效!
错误已经消失,但我的问题是为什么它在没有ob_start();
和ob_end_flush();
的情况下工作几天呢?
我想知道这种行为背后的解释。
不过,我这样打电话给header()
:
if(condition is true){
header('Location: anotherpage.php');
}
我在开头有一个session_start();
。
答案 0 :(得分:2)
以前,标题行之前没有非标题输出。现在,在标题行之前有非标题输出。这只有在输出被缓冲时才有效,所以标题实际上可以在它之前输出。
答案 1 :(得分:1)
您无法在标题前输出任何数据!
ob_start()是一个输出缓冲区,它将缓冲所有回显数据并在所有标题之后打印出来。
PHP在脚本自动完成时刷新数据,因此不需要“ob_end_flush()”
答案 2 :(得分:1)
在调用header()
之前,您有一些代码输出内容。它可以是print
,echo
或类似的陈述,甚至是<?php
之前的空格。
ob_start
导致错误消失的原因是因为它导致任何输出被缓冲,因此在您调用ob_flush
之前一直推迟。
这样就可以保证标题会在内容之前出现,即使你弄乱了代码中命令的顺序。