php是否故意认为ob_end_flush()调用之后有一些输出?
作者:互联网
这段代码:
ob_start();
ob_end_flush();
header('foo');
引发警告
Warning: Cannot modify header information - headers already sent
而这:
echo '';
header('foo');
没有.
我看不出它们之间有什么显着差异.
那么,这种行为是否正常?
PS:PHP 5.3.2
解决方法:
My initial reaction到此是“这就是我期望的行为”,但是turns out在您所使用的PHP版本上有一些细微之处.
首先让我们介绍一下为什么我的最初反应是这样,因为(鉴于you are using 5.3)它确实适用于您的测试:
ob_end_flush()隐式调用flush()
,将标头推入浏览器,而不管是否已生成任何内容.
回声”;另一方面,基本上是NOOP-您要求引擎什么也不做,所以什么也没发生.
但是,进一步的调查表明,默认情况下,OB的implicit_flush
option实际上是关闭的,因此,除非您明确启用了此选项,否则这实际上不会有任何区别.
此外,这种行为在5.2.2之前或从5.4.0版本开始就没有出现-因此,我的下一个调用端口是将this与this进行比较.即使您根本看不懂C,也应该很明显地看到其中有一个5.3和5.4中输出处理之间的巨大差异-发生了相当大的重写.
由于现实生活中的承诺,我尚未将其正确分解并找到针对此特定问题的相关关键代码,但是我会尽快进行处理,并在完成后扩展此答案.
摘要:
>根据您的PHP版本和配置,这很可能是合乎逻辑的和预期的行为.
> PHP版本之间的重大差异使此问题不仅仅是一个简单的答案
标签:output-buffering,php 来源: https://codeday.me/bug/20191123/2067001.html