- 浏览: 90459 次
文章分类
最新评论
ob_flush/flush在php手册中的描述:都是刷新输出缓冲区, 并且还需要配套使用。
其实,它们的操作对象不同,有些情况下,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,如果Web服务器的操作系统是windows系统,那顺序颠倒或者不使用ob_flush()也不会出现问题。但是在Linux系统上就无法刷新输出缓冲。
当然, 在其他sapi下, 不调用flush也可以, 只不过为了保证你代码的可移植性, 建议配套使用。
根据以上描述,进行如下的测试:
测试1,
输出:
12string(0) ""
测试2:
输出:
string(2) "12"
测试3:
输出:
12string(0) ""
测试4,
输出:
12string(0) ""
本文出处参考:http://www.jbxue.com/article/9469.html
其实,它们的操作对象不同,有些情况下,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,如果Web服务器的操作系统是windows系统,那顺序颠倒或者不使用ob_flush()也不会出现问题。但是在Linux系统上就无法刷新输出缓冲。
当然, 在其他sapi下, 不调用flush也可以, 只不过为了保证你代码的可移植性, 建议配套使用。
根据以上描述,进行如下的测试:
测试1,
<?php ob_start(); echo '1'; ob_flush();//输出php缓存并刷新 echo '2'; ob_flush();//输出php缓存并刷新 $cc = ob_get_contents(); ob_end_clean(); var_dump()($cc); ?>
输出:
12string(0) ""
测试2:
<?php ob_start(); echo '1'; flush(); //输出apache缓存并刷新 echo '2'; flush(); //输出apache缓存并刷新 $cc = ob_get_contents(); ob_end_clean(); var_dump($cc); //by www.jbxue.com ?>
输出:
string(2) "12"
测试3:
<?php ob_start(); echo '1'; ob_flush();//输出php缓存并刷新 flush();//输出apache缓存并刷新 echo '2'; ob_flush();//输出php缓存并刷新 flush();//输出apache缓存并刷新 $cc = ob_get_contents(); ob_end_clean(); var_dump($cc); //by www.jbxue.com ?>
输出:
12string(0) ""
测试4,
<?php ob_start(); echo '1'; flush();//输出apache缓存并刷新 ob_flush();//输出php缓存并刷新 echo '2'; flush();//输出apache缓存并刷新 ob_flush();//输出php缓存并刷新 $cc = ob_get_contents(); ob_end_clean(); var_dump($cc); ?>
输出:
12string(0) ""
本文出处参考:http://www.jbxue.com/article/9469.html
发表评论
-
apache2禁止显示目录列表的方法(转)
2016-03-15 16:22 945apache2禁止显示目录列表的修改方法 时间:20 ... -
php序列化函数数组与对象的方法
2016-03-15 16:13 507php序列化函数数组与对象的方法 时间:2015-1 ... -
ThinkPHP登录功能实例代码详解
2014-08-21 06:38 713分享下ThinkPHP登录功能的实现方法,是采用ThinkP ... -
几个php文件下载实例代码
2014-08-20 06:30 1042一个简单的php文件下载 ... -
php实现文件下载实例代码分享
2014-08-20 06:29 648php实现对文件下载需要http协议基础,php文件下载用到 ... -
php正则表达式入门-常用语法格式
2014-08-18 20:15 515php正则表达式入门-常 ... -
帝国cms如何用自定义函数获取新闻文章数
2014-08-14 21:55 473原文地址:http://www.jbxue.com/cms ... -
PHP生成随机用户名和密码人例子
2014-07-25 06:15 467使用PHP生成随机数可以应用在许多地方,比如可以设计程序的随 ... -
PHP下载文件方法实例教程
2014-07-25 06:14 513PHP下载文件的两种方法与代码分享 转自:http:/ ... -
php读取mysql数据库入门实例
2014-06-26 06:04 545原文链接:http://www.jbxu ... -
php读取sqlite数据库入门实例
2014-06-26 06:03 802分享一个读取sqlite数据的例子,php读取sqlite数 ... -
php curl 伪造IP来源 示例
2014-04-16 06:56 655php curl 太强大了,它不但可以模仿用户登录,还可以模仿 ... -
PHP 获取目录下的图片并随机显示 实例
2014-04-16 06:53 681从一个目录里获取某类 ... -
PHP图片上传代码一例
2014-01-02 06:47 695分享一个php图片上传代码,如下: ... -
PHP数字验证码的例子
2014-01-02 06:46 767在php中实现验证码,关键点在于掌握php gd库与sess ... -
ajax返回json类型的数据 js处理json类型的数据
2013-12-27 07:07 522ajax验证用户名 index_do. ... -
php解析xml
2013-12-27 07:03 5091,index.php <html> & ... -
PHP AJAX实现省市联动
2013-12-27 07:02 6351,province.php <html> ... -
PHP生成HTML静态页面实例代码
2013-12-15 08:21 547功能:从PHP生成HTML静态页面并存储到以年份和月份为名称 ... -
用PHP实现 上一篇、下一篇的代码
2013-12-15 08:18 558主页是index.php;传递的值是id(数据库的主键);文 ...
相关推荐
在PHP编程中,`flush()`, `ob_flush()`, 和 `ob_end_flush()` 是三个用于处理输出缓冲(Output Buffering)的函数,它们之间有着不同的功能和用途。理解这三个函数的区别对于优化网页的动态内容输出至关重要,特别是...
在PHP编程中,`ob_flush()` 和 `flush()` 是两个重要的输出控制函数,它们主要用于处理输出缓冲区。本文将深入探讨这两个函数的区别以及如何正确使用它们。 首先,我们需要理解什么是输出缓冲区。在PHP中,当程序...
`ob_flush()` 函数的作用是将PHP输出缓冲区中的内容发送到浏览器,而 `flush()` 则是尝试将缓冲区的内容立即发送到客户端,即使服务器端仍有数据未完全发送。然而,这两个函数并不总是能够确保在所有环境下都能正常...
当你调用`ob_flush()`时,它会把当前PHP缓冲区中的内容送到Web服务器的缓冲区,但并不立即发送到客户端。这意味着,即使`ob_flush`执行了,数据仍然可能在Web服务器中等待进一步处理。 而`flush`函数则更关注于Web...
`ob_flush` 和 `flush` 是两个常用于处理输出缓冲的函数,但它们的作用和使用场景有所不同。理解这两个函数的区别对于编写高效、可移植的PHP代码至关重要。 首先,`ob_flush` 属于 `ob_*` 系列函数,它主要负责处理...
本文实例分析了php中ob_flush函数和flush函数用法。分享给大家供大家参考。具体如下: ob_flush()函数: 取出PHP buffering中的数据,放入server buffering flush()函数: 取出Server buffering的数据,放入browser ...
在PHP编程中,`flush()`和`ob_flush()`都是用于处理输出缓冲的函数,但它们在功能和使用场景上存在一些关键的区别。本篇文章将详细阐述这两个函数的原理和它们在实际应用中的差异。 首先,了解缓冲的概念。缓冲...
在描述中提到的示例代码中,开发者试图通过`ob_start()`开启缓冲,然后在循环中输出数字并调用`ob_flush()`和`flush()`来尝试即时发送到浏览器,但实际并未按预期每秒输出一次。这是因为`ob_flush()`和`flush()`仅能...
本文旨在探讨如何通过PHP中的`ob_start();`函数来控制浏览器缓存,这对于优化网站性能、减少网络流量以及改善用户体验等方面具有重要意义。 #### 详细知识点分析 ##### 一、Output Control 函数概览 Output ...
`ob_start()`是PHP中用于开启输出缓冲区的函数,它会将程序生成的所有输出存储在内存中,而不是立即发送到浏览器。这使得我们可以在程序执行完毕后再一次性处理这些内容,例如将它们写入文件或进行其他处理。 `ob...
在Nginx环境中,当你尝试使用PHP的`ob_flush`和`flush`函数进行逐行输出时,可能会遇到输出不实时的问题。这个问题通常与Nginx的内部缓冲机制有关。Nginx作为反向代理服务器,它会在接收到后端应用(如PHP-FPM)的...
与ob_end_flush()不同的是,ob_end_clean()不会输出缓冲区的内容,它完全清空缓冲区并释放内存。这在某些情况下特别有用,比如在数据传输或者页面重定向前需要清空所有输出缓冲区中的内容。 4. ob_get_clean()函数...