首页 > 解决方案 > 为什么我的代码没有引发“标头已发送”警告?

问题描述

我一直认为 PHP 不允许在任何输出后发送标头。我很惊讶地发现这不会导致我的代码出现任何错误:

<?php

echo 'z';
header('X-Foo: Bar');
echo 'y';

它所做的是输出zyX-Foo: Bar标题就好了。这怎么可能?我没有使用输出缓冲。

服务器是否可以默认启用输出缓冲?或者也许 PHP 改变了它默认缓冲输出的方式?我正在使用 PHP 7.3.4。是的,我所有的错误、警告和通知都设置为显示。

我正在使用 Homestead 服务器,也许这可以作为一些提示。

标签: phpphp-7php-7.3

解决方案


这意味着在您的 php 配置中启用了指令output_buffering

该值可以是Off0(顺便说一句,默认情况下禁用),也可以是On或任何大于 0 的整数值,这意味着缓冲限制(以字节为单位)。


推荐阅读