无法修改标头信息 - 已经发送的标头(输出

时间:2014-01-05 20:29:38

标签: header

我想我搞砸了我的网站,这是我在其中一个页面上出现的错误 Warning : Cannot modify header information - headers already sent by (output started at /home/content/94/9066***/html/websites/{website name}.com/index.php:3) in /home/content/94/9066***/html/websites/{website name}.com/wp-includes/pluggable.php on line 896

我怎么摆脱这个?非常感谢你的帮助!!

4 个答案:

答案 0 :(得分:1)

您收到此错误是因为您设置了标题(很可能是标题功能) 某些输出(正文)已经发送到客户端后,例如,使用 echo

您收到的错误中包含身体输出开始的代码行和源文件以及您尝试设置标题的位置。

规则首先设置了所有标题,然后是响应的主体。

答案 1 :(得分:0)

或者只是因为行结束...检查

<?php // is there a blank line before this one?
...
?> //same question

答案 2 :(得分:0)

通常在会话函数调用之前将输出(甚至是空格或空行)发送到浏览器时会抛出此警告。

由于这是在wordpress网站上发生的,你是否修改了index.php中的任何代码?

在session_start()函数调用之前检查是否有任何回显。

答案 3 :(得分:0)

如果我们对HTTP标头有一点了解,我们可以修复“Headers already sent”错误。所以我只会触及标题的概述。

在HTTP请求期间,名为[REQUEST HEADERS]的HTTP头从客户端发送到服务器,在HTTP响应期间,称为[RESPONSE HEADERS]的HTTP头从服务器发送到客户端。

现在,这些标题包含了什么?

请求标题 - &gt;主机名,cookie信息,客户端接受的编码类型等

响应标题 - &gt;正在发送的内容类型,有关内容编码的信息等

您可以在以下链接中获得有关标题的大量信息:

http://code.tutsplus.com/tutorials/http-headers-for-dummies--net-8039

简单地说,标题包含有关正在请求或发送的页面的信息。

现在回答问题:

Php header()函数修改默认的RESPONSE标头,并包含您要发送的信息。

THUMBRULE: 

Since response headers contain info about the page being sent to client,
RESPONSE headers should be sent **FIRST** before the page itself.

因此当您回显或向浏览器显示内容然后使用标题()功能时,

<?php

echo "hi";
header("As you have already displayed "hi", this info will not be sent.);
?>

在上面的代码中,我们实际发送了页面,然后尝试发送标题信息, 所以标题不会被修改,因为默认标题已经发送,因此错误:
“标题已经发送”。

答案

1)因此,在向浏览器显示任何内容之前,请始终包含 header()功能。

2)避免错误的另一种方法是使用 ob_start()函数。此函数只将需要发送到浏览器的所有信息存储在缓冲存储器中,并且一次性输出所有信息。

让我们看一下更有意义的代码:

<?php
ob_start();
echo "hi";
echo "Hello"
header("This info will be sent");
ob_end_flush();
?>

在上面的代码中,将发送标题信息,因为 echo 语句都将存储在缓冲区中,并且在 ob_end_flush(); <行之前不会发送到浏览器/ strong>已执行。 ob_end_flush()只会清除缓冲区内存,将所有信息发送到浏览器。

NOTE: But again make sure, you use the **ob_start()** function in the beginning.