可能重复:
PHP 中的“警告:标头已发送”
在测试期间,我遇到了“标头已发送”的问题。但后来我想,这怎么可能发生?其中一个标头是 Content-Length,在整个 PHP 脚本完成之前它是未知的,它如何解决这个问题?
可能重复:
PHP 中的“警告:标头已发送”
在测试期间,我遇到了“标头已发送”的问题。但后来我想,这怎么可能发生?其中一个标头是 Content-Length,在整个 PHP 脚本完成之前它是未知的,它如何解决这个问题?
在使用设置标题之前输出任何内容时,您会收到此消息header()
。所以,确保你没有回显任何东西,没有 HTML,没有空格......在你设置标题之前什么都没有。
您应该使用输出缓冲:
ob_start();
// write all your code here
header('Content-Length: ' . ob_get_length());
到达脚本末尾时,输出缓冲会被隐式刷新
我不确定,您可以尝试的一件事是停止header()
通话,看看 PHP 是否会自动Content-Length
为您设置。
也可以看看:ob_start()
编辑
如果你在谈论 PHP 是如何做到的,它并不总是写那个头文件。一旦输出缓冲区已满,它将在不设置显式长度标头的情况下刷新它。
您必须先发送标头,然后再将任何其他内容发送到输出。一旦脚本产生任何内容 - 无论是页面的静态部分还是动态生成的输出 - PHP 发送标头后跟发送到输出的任何内容(除非您使用缓冲,在其他答案中提到)。
因此,您必须以文件开头<?php
并确保它甚至不包含某些编辑器喜欢在文件内容正确之前放置的 BOM 字符。