-4

运行我的 PHP 脚本时,出现以下错误:

Warning: Cannot modify header information - headers already sent by (output started at /wara/index.php:12) in /wara/index.php on line 18

我正在调用header()setCookies()方法。

有什么建议吗?

4

3 回答 3

4

是的,用你最喜欢的文本编辑器检查你的文件编码是否是带有 BOM 的 UTF-8。如果是,请将其转换为不带 BOM 的“UTF-8”,看看是否可以解决问题。

至于为什么:

BOM - ByteOrderMask 是一个“不可见”的三字符字符串,它嵌入在脚本的最开头。首先,编写 BOM。而且由于它不在 PHP 标记中,因此它也会发送到客户端,这就是为什么在尝试发送自己的标头时会收到“标头已发送”错误的原因。

据我所知,PHP 无法处理带有 BOM 的 UTF-8 文件,实际上也没有必要,因为 UTF8 本身就涵盖了 Endianess 问题。(例如,与 UTF16 不同)

如果您不确定并且您的编辑器也没有告诉您,请随意在十六进制编辑器中打开您的源文件并查看前三个字符。如果它们不是 ' 的 ascii 表示

编辑:正如评论部分所指出的,BOM 表示EF BB BF为 UTF-8 的十六进制值(按此顺序)。对于不支持 UTF-8 的编辑器,这将显示为. 有关更多信息,您可能需要查阅此 Wikipedia 文章

于 2013-08-09T08:16:03.473 回答
2

它说:“输出开始于 /wara/index.php:12”。在第 12 行检查您的 /wara/index.php(可能是“回声”或打印)

从手册(http://www.php.net/manual/en/function.header.php):

请记住,必须在发送任何实际输出之前调用 header(),无论是通过普通 HTML 标记、文件中的空白行还是从 PHP 发送。使用 include 或 require 函数或其他文件访问函数读取代码并在调用 header() 之前输出空格或空行是一个非常常见的错误。使用单个 PHP/HTML 文件时也存在同样的问题。

于 2013-08-09T08:19:15.593 回答
0

在第 12 行,您有一个输出,如 echo、print 或只是 php 代码之外的 html 标记符号。header()由于您已经发送了标头,因此您无法在输出某些内容后修改标头信息。

于 2013-08-09T08:17:55.500 回答