Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php是否故意认为在ob_end_flush()调用之后有一些输出?_Php_Output Buffering - Fatal编程技术网

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:run
phpinfo()
在那里-它是
output\u buffering 4096
我没有得到PHP5.3的错误。6@Amir:您有什么
output\u buffering
值?@zerkms,
output\u buffering 4096