【问题标题】:PHP output buffer failsPHP 输出缓冲区失败
【发布时间】:2012-02-26 15:31:24
【问题描述】:

只是作为一个演示,试试下面的代码:

<?php
echo '<pre>';      
ob_end_flush();
for($i=0;$i<2;$i++) {
passthru("ping -n 8 127.0.0.1");
@ob_flush();
}
echo '</pre>';
?>

这是输出:

Pinging stackoverflow.com [64.34.119.12] with 32 bytes of data:
Reply from 64.34.119.12: bytes=32 time=28ms TTL=56
Reply from 64.34.119.12: bytes=32 time=29ms TTL=56
Reply from 64.34.119.12: bytes=32 time=29ms TTL=56
Reply from 64.34.119.12: bytes=32 time=28ms TTL=56

Ping statistics for 64.34.119.12:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 28ms, Maximum = 29ms, Average = 28ms

Pinging stackoverflow.com [64.34.119.12] with 32 bytes of data:
Reply from 64.34.119.12: bytes=32 time=28ms TTL=56
Reply from 64.34.119.12: bytes=32 time=27ms TTL=56
Reply from 64.34.119.12: bytes=32 time=26ms TTL=56
Reply from 64.34.119.12: bytes=32 time=29ms TTL=56

Ping statistics for 64.34.119.12:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 26ms, Maximum = 29ms, Average = 27ms

它实际上做了两次(来自“小于 2”循环)。如果您测试脚本,您会注意到执行第一个脚本需要几秒钟,然后它会立即将其全部输出。之后(第二个循环)它逐行进行。我的目标只是有一个输出,逐行执行,而不是缓冲任何输出,如下所示,除非它发生:

<?php
system("ping -n 8 127.0.0.1");
?>

注意:这是在装有 PHP 5 的 Windows 服务器上运行的。

【问题讨论】:

  • 我看不到您在哪里开始输出缓冲...?
  • 我根本不想要输出缓冲。我发布的最后一个 PHP 代码块仅在命令完成后显示输出。同样的事情发生在 passthru 和 system 上。

标签: php windows cmd system buffer


【解决方案1】:

所以,这里发生的事情是您的浏览器可能正在缓冲。我认为如果您查看数据包嗅探器,您的刷新可能正在工作。

为了确定,请致电flush()ob_flush()

您永远无法清除所有缓冲区,因为 PHP 只知道自己的缓冲区。服务器可以缓冲,客户端几乎总是缓冲。

【讨论】:

  • 在 flush() 和 ob_flush() 之前或之后直接调用(之前和之后也尝试过)浏览器仍然不服从它?
  • 没关系。这在 IE 中按预期工作,但在 Firefox 中没有?我现在的困惑是我问这个问题时的两倍。
  • @mesh 欢迎来到 Internet Explorer 的世界。如果你现在想跳崖,你会被原谅的。
  • 最后一件事,作为一个预感:也许 mod_deflate 有一个缓冲区,但不为 IE 缓冲,因为它很烂,因此使 IE 在这种情况下工作而不是 FF?我正在禁用压缩和测试...结果:没有解决任何问题。
  • @rdlowrey,我看不出缓冲页面通常是一个问题,也不应该真的是对 IE 的打击。 Chrome 和其他人也有缓冲,这是有充分理由的。 Mesh,启动数据包嗅探器,例如 Wireshark,并准确观察发送到浏览器的内容。同样,发送的内容是您可以控制的。您看到的缓冲区无疑是在客户端,您无法控制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多