发送输出后调用header()

时间:2017-09-17 11:03:35

标签: php

根据PHP文档:

  必须在通过普通HTML标记,文件中的空行或PHP发送任何实际输出之前调用

header()。使用include或require,函数或其他文件访问函数读取代码是一个非常常见的错误,并且在调用header()之前输出空格或空行。使用单个PHP / HTML文件时存在同样的问题。

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

<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;
?>

所有工作都很好,没有错误加速,我顺利地在输出中获得了<html>标记,在标题中得到了X-Header

我正在使用PHP 7.1.9,所以文档说的仍然正确吗?

2 个答案:

答案 0 :(得分:4)

文档仍然正确。

出于性能目的,解释器将输出放在缓冲区中。当第一次填充缓冲区时,它会在发送缓冲区内容之前发送标头。

这使得脚本在发送标题之前会产生少量输出。

详细了解output buffering配置设置。

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

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

答案 1 :(得分:-1)

修改您的php.inienable Output Buffering ..