<?php for ($i=10; $i>0; $i–) { echo $i; flush(); sleep(1); } ?> 按照php手册里的说法 该函数将当前为止程序的所有输出发送到用户的浏览器。 上面的这段代码,应该隔一秒钟输出一次$i。但是实际中却不一定是这样。有可能是等了10秒钟后,所有的输出同时呈现出来。 好,我们来改一下这段代码,改成 <?php ob_end_clean();//修改部分 for ($i=10; $i>0; $i–) { echo $i; flush(); sleep(1); } ?> 嘿,加了这一句ob_end_clean();,居然就OK了。实际上,我们把 【PHP 输出缓冲技术详解】 PHP 的输出缓冲机制是为了优化页面生成和提高性能而设计的。在默认情况下,PHP 会将脚本产生的所有输出累积在内存中,直到脚本执行完毕或达到一定的缓冲区大小(由 `output_buffering` 配置决定),才会一次性发送到客户端浏览器。这在处理大量数据输出时特别有用,因为它减少了与客户端的通信次数。 在给定的代码示例中,`flush()` 函数通常用于尝试将当前缓冲区的内容立即发送到浏览器,但它的效果受到 `output_buffering` 设置的影响。如果 `output_buffering` 设置开启且未达到指定的缓冲区大小,`flush()` 可能不会立即产生效果。在这种情况下,`ob_end_clean()` 或 `ob_end_flush()` 可以用来清除或结束当前的输出缓冲,确保输出立即发送。 1. `ob_end_clean()`:这个函数清除缓冲区并关闭输出缓冲。这意味着缓冲区的内容不会被发送到浏览器,而是被丢弃。 2. `ob_end_flush()`:与 `ob_end_clean()` 类似,它也关闭输出缓冲,但会将缓冲区的内容发送到浏览器。 在第二段代码中,添加 `ob_end_clean()` 或 `ob_end_flush()` 可以立即结束缓冲,因此每个 `echo` 后的数字会立即显示,而不是等待所有输出积累到一定大小。 第三段代码中,`ob_flush()` 发送缓冲区的内容到浏览器,但不关闭缓冲,因此在每次 `echo` 后需要先调用 `ob_flush()`,再调用 `flush()`,确保输出能到达浏览器。`flush()` 是将不再存在于缓冲区的数据发送到客户端。 在某些情况下,如果希望数据一产生就立即发送,可以使用 `ob_implicit_flush(true)`。这会开启隐式刷新,使得每次有输出时,PHP 都会自动发送到浏览器,无需手动调用 `flush()`。 需要注意的是,浏览器的行为也可能影响输出的实时性。例如,Opera 浏览器可能不会在遇到 HTML 标签之前显示任何内容。此外,某些浏览器可能不支持某些特定的响应头,如在最后一段代码中使用的 `multipart/x-mixed-replace`,这种情况下,实时更新的效果可能无法实现。 为了调整输出缓冲的行为,可以在 PHP 配置文件 `php.ini` 中设置 `output_buffering` 的值,将其设为 0 可禁用缓冲,或设置为一个较小的值以减少缓冲的大小。然而,运行时通过 `ini_set()` 修改 `output_buffering` 不起作用,因为配置在脚本开始时就已经加载。 总结起来,理解 PHP 的输出缓冲机制对于编写需要实时反馈或控制输出流的应用至关重要。通过合理运用 `flush()`、`ob_flush()`、`ob_end_clean()`、`ob_end_flush()` 和 `ob_implicit_flush()`,可以更好地控制内容的发送时机,满足不同的应用需求。
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/release/download_crawler_static/13718831/bg1.jpg)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 3
- 资源: 954
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)