【问题标题】:PHP output buffering on XAMPPXAMPP 上的 PHP 输出缓冲
【发布时间】:2012-03-01 21:57:51
【问题描述】:

似乎尽管我已经做了一切努力让它工作,但它只是不起作用。

这就是我所做的一切:

  1. output_buffering = 4096
  2. zlib.output_compression = 关闭
  3. 尝试使用 ob_implicit_flush();
  4. 尝试使用 ob_flush();
  5. 将 ini 设置 output_buffering 中的缓冲区大小减少到 1

以下是我试图开始工作的代码(基本上每 1 秒输出一行),但我在 15 秒后得到整个输出。

使用 ob_implicit_flush()

<?php
ob_implicit_flush();

for($i=0;$i<=15;$i++)
{
    print($i."<BR />");
    sleep(1);
}

使用 ob_start()ob_flush() 方法:

<?php
ob_start();
for($i=0;$i<=15;$i++)
{
    print($i."<BR />");
    ob_flush();
}

还有其他我缺少的 PHP 设置吗?请帮忙。

编辑:在这个 SO 问题中使用 OP 的示例,它可以工作:PHP buffer why \r\n

我看到我必须执行 str_repeat() 来生成一个字符串以溢出缓冲区。为什么php手册中没有提到这一点?这真的是程序吗?

【问题讨论】:

  • 这段代码看起来不完整。在示例上下文中,我看不到对 ob_* 函数集的调用。
  • 抱歉,我已经更新了。

标签: php buffer


【解决方案1】:

PHP 对请求返回一个响应。如果您在该代码中有sleep() 调用,那么整个响应将等待这些调用。即使您在prints 之间设置了一秒钟的睡眠,PHP 也不会将响应以块的形式传递回浏览器。

如果您使用 PHP 作为交互式控制台,那么它应该可以正常工作并按照您的预期运行。

【讨论】:

    【解决方案2】:

    阅读http://www.php.net/flush的描述,它可以帮助你了解发生了什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多