[英]PHP output buffer fails
作为演示,请尝试以下代码:
<?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服务器上运行。
因此,这里发生的是您的浏览器可能正在缓冲。 我认为,如果您查看数据包嗅探器,则刷新可能会起作用。
只是要确保,调用flush()
以及ob_flush()
。
您永远无法清除所有缓冲区,因为PHP仅知道自己的缓冲区。 服务器可以缓冲,而客户端几乎总是缓冲。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.