php是否故意认为在ob_end_flush()调用之后有一些输出?
此代码:php是否故意认为在ob_end_flush()调用之后有一些输出?,php,output-buffering,Php,Output Buffering,此代码: ob_start(); ob_end_flush(); header('foo'); 发出警告 Warning: Cannot modify header information - headers already sent 而这: echo ''; header('foo'); 没有 我看不出他们之间有什么显著的区别 那么,这种行为是否符合预期 PS:PHP5.3.2这是“我所期望的行为”,但在您使用的php版本中有一些微妙之处 首先,让我们介绍一下为什么我的最初反应是这样的
ob_start();
ob_end_flush();
header('foo');
发出警告
Warning: Cannot modify header information - headers already sent
而这:
echo '';
header('foo');
没有
我看不出他们之间有什么显著的区别
那么,这种行为是否符合预期
PS:PHP5.3.2这是“我所期望的行为”,但在您使用的php版本中有一些微妙之处
首先,让我们介绍一下为什么我的最初反应是这样的,因为(考虑到这一点)它确实适用于您的测试:
ob\u end\u flush()
隐式调用,将标题推送到浏览器,而不管是否生成了任何内容。echo'另一方面,代码>基本上是一个-你要求引擎什么也不做,所以什么也没有发生
然而,更多的调查表明,for OB在默认情况下实际上是关闭的,因此这实际上不会有任何区别,除非您明确启用了该选项
此外,这种行为在5.2.2之前或5.4.0+中是不存在的,因此我的下一个调用端口是与进行比较。即使你根本看不懂C,很明显,5.3和5.4中的输出处理之间存在巨大的差异——已经发生了相当大的重写
由于现实生活中的承诺,我还没有把它适当地分开,并找到这个特定问题的相关关键代码,但我将很快这样做,并在我这样做后扩展这个答案
总结:
- 根据您的PHP版本和配置,这很可能是符合逻辑和预期的行为
- PHP版本之间的巨大差异使得这个问题不仅仅是一个简单的答案
您是否尝试过更新版本的PHP?5.3.10显然没有这样做:@rynah:runphpinfo()
在那里-它是output\u buffering 4096
我没有得到PHP5.3的错误。6@Amir:您有什么output\u buffering
值?@zerkms,output\u buffering 4096