Php 发送输出后调用header()

Php 发送输出后调用header(),php,Php,根据PHP文档: header()必须在发送任何实际输出之前调用,可以通过普通HTML标记、文件中的空行,也可以通过PHP。使用include或require函数或其他文件访问函数读取代码,并在调用header()之前输出空格或空行,这是非常常见的错误。使用单个PHP/HTML文件时也存在同样的问题 但当我尝试文档报告的示例时(稍作更改): 一切正常,没有出现错误,我顺利地在输出中获得了标记,在标题中获得了X-Header 我使用的是PHP7.1.9,所以文档中的内容仍然正确吗?编辑您的PH

根据PHP文档:

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

但当我尝试文档报告的示例时(稍作更改):


一切正常,没有出现错误,我顺利地在输出中获得了
标记,在标题中获得了
X-Header


我使用的是PHP7.1.9,所以文档中的内容仍然正确吗?

编辑您的
PHP.ini
启用输出缓冲。

文档仍然正确

为了提高性能,解释器将输出放在缓冲区中。当第一次填充缓冲区时,解释器发送头,然后发送缓冲区的内容(并清空缓冲区)。在此之后,对函数
header()
的任何调用都将失败。无法再修改标头,也无法添加其他标头,因为标头已发送

这让脚本在发送头之前生成少量输出

了解有关配置设置的更多信息

该选项允许关闭或打开功能,甚至可以设置缓冲区的大小


该选项告诉解释器在每个输出块之后刷新缓冲区。这将强制脚本在任何输出之前正确发送标题。

这在某种程度上取决于
php.ini
config中设置的一些设置。尽管在输出之后更改HTTP头并没有多大意义,但我们应该始终以这样的方式来构造程序,即在输出之前调用头。根据定义,“头”位于任何内容/输出之前。Asker已经启用了某种形式的输出缓冲,如果他们没有收到该代码示例的错误。
<html>
<?php
/* This will give an error. Note the output
 * above, which is before the header() call */
header('X-Header: http://www.example.com/');
exit;
?>