理解PHP中的flush、Ob_flush和buffer_output

发布于 2024-12-11 15:20:25 字数 396 浏览 0 评论 0原文

我正在阅读有关内容缓冲的内容,我发现一个简单的脚本来显示刷新效果,

<?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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最终幸福 2024-12-18 15:20:25

最后我找到了原因。

根据 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.

向地狱狂奔 2024-12-18 15:20:25

我认识到这个问题,我自己也遇到过一次。您是否激活了输出压缩?

I recognize this problem, had it once myself.. Do you have output compression activated?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文