XAMPP上的PHP输出缓冲

时间:2012-03-01 21:57:52

标签: php buffer

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

以下是我所做的一切:

  1. output_buffering = 4096
  2. zlib.output_compression = Off
  3. 尝试使用 ob_implicit_flush();
  4. 尝试使用 ob_flush();
  5. 将ini设置 output_buffering 中的缓冲区大小减少为 1
  6. 以下是我试图开始工作的代码(基本上每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手册中没有提到这个?这真的是程序吗?

2 个答案:

答案 0 :(得分:1)

PHP会向请求返回一个响应。如果您在该代码中进行sleep()次呼叫,则整个响应将等待这些呼叫。即使您在print之间进行了一秒钟的休眠,PHP也不会以块的形式将响应传递回浏览器。

如果您使用PHP作为交互式控制台,那么这可能会像您预期的那样工作和行为。

答案 1 :(得分:0)

阅读http://www.php.net/flush说明,它可以帮助您了解会发生什么。