0

可能重复:
PHP 中的“警告:标头已发送”

在测试期间,我遇到了“标头已发送”的问题。但后来我想,这怎么可能发生?其中一个标头是 Content-Length,在整个 PHP 脚本完成之前它是未知的,它如何解决这个问题?

4

3 回答 3

1

在使用设置标题之前输出任何内容时,您会收到此消息header()。所以,确保你没有回显任何东西,没有 HTML,没有空格......在你设置标题之前什么都没有。

于 2012-11-22T23:25:26.020 回答
1

您应该使用输出缓冲:

ob_start();
// write all your code here

header('Content-Length: ' . ob_get_length());

到达脚本末尾时,输出缓冲会被隐式刷新

我不确定,您可以尝试的一件事是停止header()通话,看看 PHP 是否会自动Content-Length为您设置。

也可以看看:ob_start()

编辑

如果你在谈论 PHP 是如何做到的,它并不总是写那个头文件。一旦输出缓冲区已满,它将在不设置显式长度标头的情况下刷新它。

另见: http: //php.net/manual/en/outcontrol.configuration.php

于 2012-11-22T23:26:51.507 回答
0

您必须先发送标头,然后再将任何其他内容发送到输出。一旦脚本产生任何内容 - 无论是页面的静态部分还是动态生成的输出 - PHP 发送标头后跟发送到输出的任何内容(除非您使用缓冲,在其他答案中提到)。

因此,您必须以文件开头<?php并确保它甚至不包含某些编辑器喜欢在文件内容正确之前放置的 BOM 字符。

于 2012-11-22T23:29:17.820 回答