如何在页面完成渲染之前发送标题?

时间:2012-11-22 23:24:00

标签: php http-headers

  

可能重复:
  “Warning: Headers already sent” in PHP

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

答案 2 :(得分:0)

你必须在发送任何其他东西之前发送标题输出。一旦脚本产生任何东西 - 无论是页面的静态部分还是动态生成的输出 - PHP发送标题后跟发送到输出的任何内容(unles)你使用缓冲,在其他答案中提到)。

因此,您必须使用<?php启动文件,并确保它不包含某些编辑者在文件内容正确之前放置的BOM字符。