0

我正在尝试在 MAMP 上运行一个简单的 PHP 脚本。我正在使用 PHP 5.2.17 并且我关闭了压缩。我试图执行这个简单的脚本

<?php
    ob_flush();
    foreach(range(1,9) as $n){
    echo $n."\n";
    flush();
    sleep(1);
}

出于某种原因,这没有做它应该做的事情。它不是按顺序回显数字,而是在循环完成时简单地回显它们。我错过了什么吗?还有另一种方法吗?

4

2 回答 2

1

输出缓冲是一种机制,用于控制 PHP 在将数据推送到客户端之前应在内部保留多少输出数据(不包括标头和 cookie)。如果您的应用程序的输出超出此设置,PHP 将发送该数据大致为您指定大小的块。启用此设置并管理其最大缓冲区大小可能会产生一些有趣的副作用,具体取决于您的应用程序和 Web 服务器。在您已经通过打印或回显发送输出后,您可能能够发送标头和 cookie。如果您的服务器由于缓冲输出而发出的数据包较少,而 PHP 在获得输出时对输出进行流式传输,您也可能会看到性能优势。在生产服务器上,出于性能原因,4096 字节是一个很好的设置。

注意:输出缓冲也可以通过输出缓冲控制功能来控制。

php.ini 可能的值:

On = Enabled and buffer is unlimited. (Use with caution) 
Off = Disabled    
Integer = Enables the buffer and sets its maximum size in bytes.  
eg: output_buffering = Off

注意:对于 CLI SAPI,此指令硬编码为 Off

http://php.net/output-buffering

一个工作示例,如果 output_buffering 设置为 4096

<?php
ob_start();
// Output string to overflow browser php.ini output_buffering setting.
echo str_repeat(PHP_EOL, 4097);

for ($i=0; $i<5; $i++) {
  echo PHP_EOL.$i;
  ob_flush();
  flush();
  sleep(1);
}
ob_end_flush();
?>
于 2012-04-13T16:56:45.487 回答
0

确实是缓冲区大小

PHP 缓冲区为什么 \r\n

这个例子对我有用

于 2012-04-13T16:37:25.647 回答