PHP - 标头错误

时间:2013-08-09 08:15:10

标签: php

运行我的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()方法。

任何消化?

3 个答案:

答案 0 :(得分:4)

是的,如果您的文件编码是带有BOM的UTF-8,请查看您喜欢的文本编辑器。如果是,请将其转换为“UTF-8”而不使用BOM,看看它是否有效。

至于原因:

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

根据我的知识,PHP无法处理带有BOM的UTF-8文件,而且实际上也没有必要,因为UTF8本身也包含Endianess问题。 (例如,与UTF16不同)

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

编辑: 正如评论部分所指出的,BOM表示为UTF-8的十六进制值EF BB BF(按此顺序)。对于UTF-8无法编辑的编辑器,这将显示为。 有关详细信息,您可以咨询this Wikipedia article

答案 1 :(得分: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文件时存在。

答案 2 :(得分:0)

在第12行,你有一个输出,如echo,print或只是PHP代码之外的html标记符号。输出内容后,您无法使用header()修改标题信息,因为您已经发送了标题。