如何使用 flush() 在 MAMP 上回显进度


How do echo out progress on MAMP using flush()

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

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

出于中小企业的原因,这没有做它应该做的事情。它不是按顺序回显数字,而是简单地在循环完成后回显它们。我错过了什么吗?有没有其他方法可以做到这一点?

输出

缓冲是一种控制输出数据量的机制(不包括标头和饼干)PHP 应该在内部保留之前将该数据推送到客户端。如果应用程序的输出超过此设置,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();
?>

事实上,它是缓冲区大小

PHP 缓冲区为什么 ''r'

这个例子对我有用