- 浏览: 84936 次
文章分类
最新评论
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 893apache2禁止显示目录列表的修改方法 时间:20 ... -
php序列化函数数组与对象的方法
2016-03-15 16:13 459php序列化函数数组与对象的方法 时间:2015-1 ... -
ThinkPHP登录功能实例代码详解
2014-08-21 06:38 657分享下ThinkPHP登录功能的实现方法,是采用ThinkP ... -
几个php文件下载实例代码
2014-08-20 06:30 994一个简单的php文件下载 ... -
php实现文件下载实例代码分享
2014-08-20 06:29 601php实现对文件下载需要http协议基础,php文件下载用到 ... -
php正则表达式入门-常用语法格式
2014-08-18 20:15 467php正则表达式入门-常 ... -
帝国cms如何用自定义函数获取新闻文章数
2014-08-14 21:55 429原文地址:http://www.jbxue.com/cms ... -
PHP生成随机用户名和密码人例子
2014-07-25 06:15 418使用PHP生成随机数可以应用在许多地方,比如可以设计程序的随 ... -
PHP下载文件方法实例教程
2014-07-25 06:14 471PHP下载文件的两种方法与代码分享 转自:http:/ ... -
php读取mysql数据库入门实例
2014-06-26 06:04 505原文链接:http://www.jbxu ... -
php读取sqlite数据库入门实例
2014-06-26 06:03 753分享一个读取sqlite数据的例子,php读取sqlite数 ... -
php curl 伪造IP来源 示例
2014-04-16 06:56 609php curl 太强大了,它不但可以模仿用户登录,还可以模仿 ... -
PHP 获取目录下的图片并随机显示 实例
2014-04-16 06:53 625从一个目录里获取某类 ... -
PHP图片上传代码一例
2014-01-02 06:47 644分享一个php图片上传代码,如下: ... -
PHP数字验证码的例子
2014-01-02 06:46 720在php中实现验证码,关键点在于掌握php gd库与sess ... -
ajax返回json类型的数据 js处理json类型的数据
2013-12-27 07:07 477ajax验证用户名 index_do. ... -
php解析xml
2013-12-27 07:03 4601,index.php <html> & ... -
PHP AJAX实现省市联动
2013-12-27 07:02 5711,province.php <html> ... -
PHP生成HTML静态页面实例代码
2013-12-15 08:21 485功能:从PHP生成HTML静态页面并存储到以年份和月份为名称 ... -
用PHP实现 上一篇、下一篇的代码
2013-12-15 08:18 507主页是index.php;传递的值是id(数据库的主键);文 ...
相关推荐
有关php的ob_flush()与flush()使用方法 注意:ob_flush()和flush()这两个函数一般要一起使用,顺序是先ob_flush(),然后flush(),它们的作用是刷新缓冲区。这里具体的说下什么时候要用到刷新缓冲区和为什么要刷新...
因此,必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。 个别web服务器程序,特别是Win32下的web服务器程序,在发送结果到浏览器之前,仍然会缓存脚本的输出,直到程序结束为止 自己写了个小例子,想在页面...
ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑… 其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情.. ob_*系列函数, 是操作PHP本身的输出缓冲区. ...
本文实例分析了php中ob_flush函数和flush函数用法。分享给大家供大家参考。具体如下: ob_flush()函数: 取出PHP buffering中的数据,放入server buffering flush()函数: 取出Server buffering的数据,放入browser ...
php中flush()、ob_flush()、ob_end_flush()的区别介绍,需要的朋友可以参考下
本文实例讲述了php使用ob_flush不能每隔一秒输出原理。分享给大家供大家参考。具体分析如下: 实现功能: 浏览器每隔一秒输出一个数字。 php.ini配置为: 版本5.3 implicit_flush = off output_buffering = off 另:...
ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑
本篇文章是对PHP中的flush函数与ob_flush函数的区别进行了详细的分析介绍,需要的朋友参考下
我在一次调试PHP逐行输出时候,发现ob_flush和flush两个都失效了,通过phpinfo基本能判断php.ini的设置是正常的。 解决方法 再去看Nginx,发现Nginx中,有如下的设置: fastcgi_buffer_size 128k; fastcgi_buffers ...
我想将PHP脚本中输出的东西收集在一起,于是使用了ob_start和ob_end_flush这两个函数,确实有达到收集输出内容的作用,但同时也将这些打印到了控制台界面中。我想问的是有没有办法,阻止PHP像控制台输出信息。该软件...
ob_start()函数用于打开缓冲区,比如header()函数之前如果就有输出,包括回车/空格/换行/都会有”Header had all ready send by”的错误,这时可以先用ob_start()打开缓冲区PHP代码的数据块和echo()输出都会进入缓冲区...
老生长谈了。。纯备忘 对于运行时间较长的PHP程序来说可能都需要即时输出内容来查看运行情况。 复制代码 代码如下: ...charset=utf-8″); #设置执行时间不限时 set_time_limit(0);...ob_implicit_flush
输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似... //把浏览器重定向到index.php ob_end_flush();//输出全部内容到浏览器 ?> 所有对header()函数有了解的人都知道,这个函数