[转] http://www.laruence.com/2010/04/15/1414.html
ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑…
其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情..
ob_*系列函数, 是操作PHP本身的输出缓冲区.
所以, ob_flush是刷新PHP自身的缓冲区.
而flush, 严格来讲, 这个只有在PHP做为apache的Module(handler或者filter)安装的时候, 才有实际作用. 它是刷新WebServer(可以认为特指apache)的缓冲区.
在apache module的sapi下, flush会通过调用sapi_module的flush成员函数指针, 间接的调用apache的api: ap_rflush刷新apache的输出缓冲区, 当然手册中也说了, 有一些apache的其他模块, 可能会改变这个动作的结果..
有些Apache的模块,比如mod_gzip,可能自己进行输出缓存,
这将导致flush()函数产生的结果不会立即被发送到客户端浏览器。
甚至浏览器也会在显示之前,缓存接收到的内容。例如 Netscape
浏览器会在接受到换行或 html 标记的开头之前缓存内容,并且在
接受到 </table> 标记之前,不会显示出整个表格。
一些版本的 Microsoft Internet Explorer 只有当接受到的256个
字节以后才开始显示该页面,所以必须发送一些额外的空格来让这
些浏览器显示页面内容。
所以, 正确使用俩者的顺序是. 先ob_flush, 然后flush,
当然, 在其他sapi下, 不调用flush也可以, 只不过为了保证你代码的可移植性, 建议配套使用.
分享到:
相关推荐
本文将深入探讨这两个函数的区别以及如何正确使用它们。 首先,我们需要理解什么是输出缓冲区。在PHP中,当程序执行到输出语句(如 `echo` 或 `print`)时,数据并不会立即发送到浏览器,而是被存储在一个内部缓冲...
理解这三个函数的区别对于优化网页的动态内容输出至关重要,特别是对于那些需要实时更新或者大量数据分批输出的情况。 1. **flush()**: `flush()` 函数的作用是尝试将PHP缓冲区中的所有内容推送到客户端。它的...
`ob_flush` 和 `flush` 是两个非常关键的函数,用于处理输出缓冲。 `ob_flush()` 函数的作用是将PHP输出缓冲区中的内容发送到浏览器,而 `flush()` 则是尝试将缓冲区的内容立即发送到客户端,即使服务器端仍有数据...
`ob_flush`和`flush`这两个函数是实现这一功能的关键。然而,由于它们的描述和使用方式容易让人混淆,这里我们将详细解析这两个函数的工作原理和如何配合使用。 首先,`ob_flush`和`flush`都是用来处理PHP输出缓冲...
`ob_flush` 和 `flush` 是两个常用于处理输出缓冲的函数,但它们的作用和使用场景有所不同。理解这两个函数的区别对于编写高效、可移植的PHP代码至关重要。 首先,`ob_flush` 属于 `ob_*` 系列函数,它主要负责处理...
在PHP编程中,`flush()`和`ob_flush()`都是用于处理输出缓冲的函数,但它们在功能和使用场景上存在一些关键的区别。本篇文章将详细阐述这两个函数的原理和它们在实际应用中的差异。 首先,了解缓冲的概念。缓冲...
本文实例分析了php中ob_flush函数和flush函数用法。分享给大家供大家参考。具体如下: ob_flush()函数: 取出PHP buffering中的数据,放入server buffering flush()函数: 取出Server buffering的数据,放入browser ...
在描述中提到的示例代码中,开发者试图通过`ob_start()`开启缓冲,然后在循环中输出数字并调用`ob_flush()`和`flush()`来尝试即时发送到浏览器,但实际并未按预期每秒输出一次。这是因为`ob_flush()`和`flush()`仅能...
##### 三、深入理解 1. **关于Flush函数** - **功能**:刷新浏览器缓存。对于某些需要实时显示进度的应用场景特别有用。 - **示例代码**: ```php for ($i = 1; $i ; $i++) print(""); // 关键部分 for ($j ...
`ob_end_flush()`发送缓冲区内容到浏览器并关闭缓冲区。 `ob_implicit_flush()`可以打开或关闭绝对刷新,当开启时,PHP会自动将输出直接发送到浏览器,无需手动调用`flush()`。 2. **Smarty模板引擎**: Smarty...
在Nginx环境中,当你尝试使用PHP的`ob_flush`和`flush`函数进行逐行输出时,可能会遇到输出不实时的问题。这个问题通常与Nginx的内部缓冲机制有关。Nginx作为反向代理服务器,它会在接收到后端应用(如PHP-FPM)的...
ob_get_clean()是一个便捷的函数,它结合了ob_get_contents()和ob_end_clean()的功能,先返回缓冲区内容,然后清除缓冲区。 5. 输出缓冲的使用场景示例: 输出缓冲在各种场景下都很有用。例如,在生成图片并下载的...
需要注意的是,在使用ob_start()及其变体时,必须确保在整个脚本的生命周期内使用ob_end_clean()或ob_end_flush()来结束输出缓冲,否则会导致后续的内容无法输出,或者出现输出不正常的情况。ob_end_clean()会清除...