理解PHP中的flush、Ob_flush和buffer_output
我正在阅读有关内容缓冲的内容,我发现一个简单的脚本来显示刷新效果,
<?php
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i < 10; $i++) {
echo "<br> Line to show.";
echo str_pad('', 4096) . "\n";
ob_flush();
flush();
sleep(2);
}
echo "Done.";
ob_end_flush();
?>
该脚本工作正常并显示输出,但是当我删除 str_pad 或将长度从 4096 减少到 40 时,刷新不起作用。
谁能帮我看看到底是什么原因造成的..
i was reading about the buffering of contents and i found a simple script to show effects of flush
<?php
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i < 10; $i++) {
echo "<br> Line to show.";
echo str_pad('', 4096) . "\n";
ob_flush();
flush();
sleep(2);
}
echo "Done.";
ob_end_flush();
?>
this script works fine and show the output , but when i remove the str_pad or reduce the length from 4096 to 40 flush does not work.
can any one help me out what exactly causing this..
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最后我找到了原因。
根据 PHP.net 浏览器需要某些字节来启动页面的显示。像某些版本的 Internet Explorer 需要 200 字节。 Firefox 或 Chrome 等现代浏览器需要更多字节才能启动浏览器显示。
在上述情况下,如果您在 Internet Explorer 中检查它,则不需要字符串填充,但在 Firefox 或 Chrome 中,您需要使用输入填充空格以显示刷新的输出。
Atlast i found the reason.
According to PHP.net Broswers require certain bytes to start the display of the page. Like some version of Internet Explorer require 200 bytes. And modern broswers like Firefox or Chrome requires more bytes to start Browser display.
In above case if you check it in Internet Explorer it will not require string padding but in Firefox or Chrome you need to Padd spaces with input to display flushed output.
我认识到这个问题,我自己也遇到过一次。您是否激活了输出压缩?
I recognize this problem, had it once myself.. Do you have output compression activated?