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】:
因为我们的echo
s 即将到来在您发送不允许的标头。确保标头位于任何输出之前。
如果您不想重新排列,也可以使用输出缓冲。
【讨论】:
在我的登台服务器上工作正常,但在实时服务器上中断。你建议我如何修复它@codaddict?【参考方案3】:在有任何其他输出之前处理标头,因此如果您写出一些内容,那么 PHP 之后将无法正确发送标头。在您的代码中的某个时刻,您给出了 HEAD 指令,因此失败了。 (这有技术原因,例如重定向等)
【讨论】:
【参考方案4】:问题不是回声。这很可能是由您包含在 .php 文件中的文件引起的。你有没有包含一个文件?这可能会在顶部。如果您包含的文件语句不在文件顶部,请确保它是。
【讨论】:
以上是关于PHP标头已发送[重复]的主要内容,如果未能解决你的问题,请参考以下文章
警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送 [重复]