PHP标头已发送[重复]

Posted

技术标签:

【中文标题】PHP标头已发送[重复]【英文标题】:PHP headers already sent [duplicate] 【发布时间】:2011-04-17 14:26:56 【问题描述】:

可能重复:Headers already sent by php

得到以下错误:

"Warning: Cannot modify header information - headers already sent by (output started at..."

对于以下行:

echo '<center>Current Time is '. gmdate("H:i A") . ' GMT (Greenwich Mean Time or UTC)<br />';

如果我将其注释掉,它只会在下一个 echo 语句中抛出错误。思考为什么 PHP 如此讨厌我的 echo 语句?

这是我在 html 底部的包含:

<div id="saveCanForm" >
<?php include('savereport.php'); ?>
</div>

【问题讨论】:

文件中是否有任何包含,是否有一些流氓空白? 我在底部确实有一个包含。我将使用该代码更新我的问题。 绝对是包含问题。如果我将其注释掉,则页面 a) 加载速度更快,并且 b) 没有错误。任何想法如何使包括正常工作? 【参考方案1】:

问题不在于echo 语句。看起来您在文件后面的某处有一个header 调用,但是一旦您输出任何文本,您就无法发送标题。您可以将标头移动到脚本的开头,也可以使用输出缓冲。

【讨论】:

我在底部有一个 INCLUDE 似乎是违规方。在我的登台服务器上运行良好,这很奇怪。关于如何使它包括工作的任何想法(我在我的原始问题中发布了代码)? 包含的文件很可能调用了header,这会导致问题,因为它发生在主文件中的echo 语句之后。最简单的方法是使用输出缓冲:在主脚本的开头调用ob_start(),在最后调用ob_end_flush() ob_start 和 ob_end_flush 运行良好。您提到这是“最简单”的方式——出于好奇,有没有“更好”的方式? 不,不修改包含文件本身。【参考方案2】:

因为我们的echos 即将到来您发送不允许的标头。确保标头位于任何输出之前。

如果您不想重新排列,也可以使用输出缓冲。

【讨论】:

在我的登台服务器上工作正常,但在实时服务器上中断。你建议我如何修复它@codaddict?【参考方案3】:

在有任何其他输出之前处理标头,因此如果您写出一些内容,那么 PHP 之后将无法正确发送标头。在您的代码中的某个时刻,您给出了 HEAD 指令,因此失败了。 (这有技术原因,例如重定向等)

【讨论】:

【参考方案4】:

问题不是回声。这很可能是由您包含在 .php 文件中的文件引起的。你有没有包含一个文件?这可能会在顶部。如果您包含的文件语句不在文件顶部,请确保它是。

【讨论】:

以上是关于PHP标头已发送[重复]的主要内容,如果未能解决你的问题,请参考以下文章

警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送 [重复]

无法修改标头信息 - 标头已由...发送 WordPress 问题 [重复]

如何修复 PHP 中的“标头已发送”错误

如何修复 PHP 中的“标头已发送”错误

如何修复 PHP 中的“标头已发送”错误

如何修复 PHP 中的“标头已发送”错误