一尘不染

参考-此错误在PHP中意味着什么?

php

这是什么?
这是有关警告,错误和注意事项的许多答案,这些警告,错误和注意事项在您对PHP进行编程时可能会遇到,并且不知道如何解决它们。这也是一个社区Wiki,因此邀请所有人参与添加并维护此列表。

为什么是这样?
诸如“已发送标题”或“呼叫非对象成员”之类的问题经常在堆栈溢出中弹出。这些问题的根本原因总是相同的。因此,这些问题的答案通常会重复它们,然后向OP显示在特定情况下应更改的行。这些答案不会为网站增加任何价值,因为它们仅适用于OP的特定代码。具有相同错误的其他用户无法轻松地从中读取解决方案,因为他们过于本地化。令人遗憾的是,一旦您了解了根本原因,就可以轻松地修复错误。因此,此列表试图以一种通用的方式解释该解决方案。

我该怎么办?
如果您的问题已被标记为与此问题的重复,请在下面找到您的错误消息,并将修复程序应用于您的代码。答案通常包含进一步的链接,以进行调查,以免仅凭一般答案无法明确答案。

如果您想做出贡献,请添加“最喜欢的”错误消息,警告或通知,每个答案一个,简短说明其含义(即使只是在其手册页上突出显示术语),可能的解决方案或调试方法以及现有有价值的问答列表。此外,请随时改善任何现有答案。


阅读 304

收藏
2020-05-26

共1个答案

一尘不染

警告:无法修改标头信息-标头已发送
当脚本尝试将HTTP标头发送到客户端但之前已经有输出时,会发生此情况,这导致标头已经发送到客户端。

这是一个E_WARNING并且不会停止脚本。

一个典型的示例是这样的模板文件:

<html>
    <?php session_start(); ?>
    <head><title>My Page</title>
</html>
...

session_start()函数将尝试将带有会话cookie的标头发送到客户端。但是PHP在将<html>元素写入输出流时已经发送了标头。您必须将其session_start()移到顶部。

您可以通过在代码触发警告之前检查各行并检查其输出位置来解决此问题。将任何标头发送代码移到该代码之前。

一个经常被忽略的输出是PHP关闭之后的换行符?>?>当它是文件中的最后一件事时,这被认为是标准做法。同样,此警告的另一个常见原因是,如果开头之前<?php有空格,行或不可见字符,则导致Web服务器发送标头和空白/换行符,因此当PHP开始解析时将无法提交任何标题。

如果文件中包含多个<?php ... ?>代码块,则文件之间不应有任何空格。(注意:如果您具有自动构造的代码,则可能有多个块)

还要确保您的代码中没有任何字节顺序标记,例如,当脚本的编码为带有BOM的UTF-8时。

2020-05-26