【发布时间】:2019-10-15 07:51:33
【问题描述】:
我一直认为 PHP 不允许在任何输出后发送标头。我很惊讶地发现这不会导致我的代码出现任何错误:
<?php
echo 'z';
header('X-Foo: Bar');
echo 'y';
它的作用是输出zy 和X-Foo: Bar 标头就好了。这怎么可能?我没有使用输出缓冲。
服务器是否可以默认启用输出缓冲?或者 PHP 改变了它默认缓冲输出的方式?我正在使用 PHP 7.3.4。是的,我所有的错误、警告和通知都设置为显示。
我正在使用 Homestead 服务器,也许这可以作为一些提示。
【问题讨论】:
-
@DerekPollard 再次阅读问题。 OP知道这一点。 OP 想知道为什么它(显然)在不应该的时候工作。
-
它在我的版本 7.3.3 上发送错误
-
它也应该在你的版本上重新运行
Warning。见3v4l.org/EGrXp -
我会看php.net/manual/en/outcontrol.configuration.php。可以在
php.ini级别打开输出缓冲。 OP 提到 Homestead - 这个代码在 Laravel 中吗? -
对我也很好,但添加了 flush();在回声'z'之后;我收到“标头已发送”错误。因此,出于某种原因(可能是服务器配置),echo 不会直接发送到输出。