我在utube上发现了一个关于预防警告的视频:
“警告:无法修改标头信息 - 已发送的标头”。在 以下链接:
https://www.youtube.com/watch?v=leIz1Q2LJr4
我在几年前看过这个网站上的解决方案,但是这些解决方案似乎都不起作用,尽管解决方案很有意义。
然而,这个对我有用的解决方案毫无意义,我想知道是否有人可以解释原因?
我无法使用header('location: filename')
打开新网页。我一直收到警告。我将ob_start()
添加到我的索引页面的开头(带有标题指令的PHP部分,根据视频),突然警告消失,页面开始打开。为什么会这样?
我认为ob_start()
涉及正在打开的新页面而不是当前活动文档?
我在这里添加了以下代码:
ob_start();
header('Content-Type: text/html');
header('X-Content-Type-Options: nosniff', false);
//stop cacheing of page
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Pragma: no-cache"); // HTTP/1.0
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("X-XSS-Protection: 1");
header("X-Frame-Options: SAMEORIGIN");
答案 0 :(得分:0)
如果在发送http标头之前输出任何内容,则会出现“无法修改标头信息”错误。
ob_start()
启动一个名为“输出缓冲”的php功能,它将阻止php直接输出数据(到浏览器)。相反,所有输出都被“重定向”到缓冲区,并且只有在调用ob_flush()
时才会将其转换为输出,从而清除缓冲区。
在您的示例ob_start()
中,“捕获”在发送标头之前创建的任何输出并解决您的问题。由于您的脚本中没有ob_flush()
所有以前创建的输出都“消失”。