PHP头信息已经发送

3
可能重复:
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底部的include:

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

1
你的文件中是否有任何包含文件,或者是否存在一些不规则的空格? - reech
我确实在底部有一个include。我会用那段代码更新我的问题。 - themerlinproject
肯定是包含文件的问题。如果我将其注释掉,页面会a)加载得更快,b)没有错误。有什么想法可以使该包含文件正常工作吗? - themerlinproject
4个回答

11

问题不在于echo语句。看起来你的文件中后面有一个header调用,但是一旦输出任何文本,就不能发送标头。你可以将标头移到脚本的开头,或者使用输出缓冲的方式。


我有一个INCLUDE在底部,似乎是罪魁祸首。在我的暂存服务器上运行良好,这很奇怪。有什么办法让那个INCLUDE工作吗(我在原始问题中发布了代码)? - themerlinproject
1
很可能包含的文件调用了 header,这会导致问题,因为它出现在主文件中的 echo 语句之后。最简单的解决方法是使用输出缓冲:在主脚本的开头调用 ob_start(),并在结尾处调用 ob_end_flush() - casablanca
ob_start和ob_end_flush运行得非常完美。你提到这是“最简单”的方法 - 出于好奇,是否有更好的方法? - themerlinproject
不行,除非修改包含文件本身。 - casablanca

0

由于我们的 echo 在您发送头部之前出现,这是不允许的。请确保头部在任何输出之前。

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


我的测试服务器可以正常工作,但是在生产环境中出现了故障。您认为我该如何修复它 @codaddict? - themerlinproject

0

在有任何其他输出之前,头部就已经处理完毕了,因此如果您先输出了一些内容,那么 PHP 就无法正确地发送头部。在代码的某个地方,您正在给出 HEAD 指令,因此失败了。(这涉及到诸如重定向等技术原因)


0

问题不在于回声,而很可能是您在 .php 文件中包含的文件引起的。您是否已经包含了任何文件?这可能会在顶部。如果包含文件语句不在文件顶部,请确保它在那里。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接