(转载)php flush()刷新不能输出缓冲的原因分析
在php程序编写中,flush()的使用率还是挺高的,它在网页表现即时信息效果时发挥了极为重要的作用,比如之前写的php实现限制文件下载速度的代码实例,flush()就起了举足轻重的作用,是进度条实现代码里的关键语句。
关于flash()的解释
语法:
flush();
作用:
刷新PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。
问题:
flush()刷新为什么不能输出缓冲?
很简单的程序代码
for ($i=10; $i>2; $i--)
{
echo $i.'<br />';
flush();
sleep(1);
}
其运行结果应该是从10到3,依次输出到浏览器里,效果图如下:

上述代码,如果没有flush();这句,则10到3的数字会一起输出到浏览器。
然而就是上述的代码,我在本地测试成功,但是上传到空间里后却无效了,这是怎么回事?
后来我查了相关的资料,发现flush();的使用还需要注意一些问题,这些问题可能在我们没有遇到的时候我们是不会去想到的。那就是flush()需要与ob_flush()配合着使用,否则在linux系统里不会输出缓冲。
而flush()与ob_flush()配合着使用的同时,写法上也需要讲究,那就是先写ob_flush();再写flush();,如下:
ob_flush();
flush();
好了,问题的症状就在这里,于是,上述代码就应该写成如下所示:
for ($i=10; $i>2; $i--)
{
echo $i.'<br />';
ob_flush(); //此句不能少
flush();
sleep(1);
}
ob_end_flush();
这样,无论是在哪个系统,哪个web服务器,都可以正常的输出缓冲了。
(转载)php flush()刷新不能输出缓冲的原因分析的更多相关文章
- php flush()刷新不能输出缓冲的原因分析
在php程序编写中,flush()的使用率还是挺高的,它在网页表现即时信息效果时发挥了极为重要的作用,比如之前写的php实现限制文件下载速度的代码实例,flush()就起了举足轻重的作用,是进度条实现 ...
- 【转载】div层调整zindex属性无效原因分析及解决方法
在做的过程中,发现了一个很简单却又很多人应该碰到的问题,设置Z-INDEX属性无效.在CSS中,只能通过代码改变层级,这个属性就是z-index,要让z-index起作用有个小小前提,就是元素的pos ...
- php 输出缓冲
<?php ob_start();//开启php输出缓冲区 echo "A"; //"A"会进入php输出缓冲区 ob_flush();//将php输出缓 ...
- (转载)PHP中刷新输出缓冲
(转载)http://www.cnblogs.com/mutuan/archive/2012/03/18/2404957.html PHP中刷新输出缓冲buffer是一个内存地址空间,Linux系统默 ...
- PHP中刷新输出缓冲详解[转载]
PHP中刷新输出缓冲详解 分类: PHP Web开发2011-07-23 17:42 1795人阅读 评论(0) 收藏 举报 phpbuffer浏览器outputapache模块脚本 buffer是一 ...
- PHP中刷新输出缓冲
http://www.cnblogs.com/mutuan/archive/2012/03/18/2404957.html PHP中刷新输出缓冲buffer是一个内存地址空间,Linux系统默认大小一 ...
- PHP输出缓冲(Output Buffering)
什么是缓冲区? 简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题~其实缓冲区最本质的作用就是,协调高速CPU和相对缓慢的IO设备 ...
- PHP 输出缓冲控制(Output Control) 学习
php 缓冲简介 其实我对php ob 系列印象还是很模糊,具体怎么玩的,还不是很了解,平时curd,确实对这些内容没有深入.作为phper 甚是惭愧.网上搜了一通,互相copy,代码运行不能出现作者 ...
- PHP中输出缓冲
在PHP中,当运行echo,print的时候,输出并没有马上通过tcp传给client浏览器显示, 而是将数据写入php buffer.php output_buffering机制,意味在tcp bu ...
随机推荐
- oracle左右连接 完全连接 有效连接 心得总结
左链接 A表 Left join B表 on 条件 示例 A表 B表 SELECT * FROM A left JOIN B ON A.AID = B.BID; 结果: 左链接查询出来的数 ...
- STL的基本使用之关联容器:set和multiSet的基本使用
STL的基本使用之关联容器:set和multiSet的基本使用 简介 set 和 multiSet 内部都是使用红黑树来实现,会自动将元素进行排序.两者不同在于set 不允许重复,而multiSet ...
- iOS 里面如何使用第三方应用程序打开自己的文件,调用wps其他应用打开当前应用里面的的ppt doc xls
我们的自己的应用里面经常涉及的要打开ppt doc,这样的功能,以前总以为iOS沙盒封闭化,不可能实现,后来终于解决了 使用 UIDocumentInteractionController 来解决这一 ...
- sublime text snippet代码片断
$0 代表补全代码后放的位置 0 的权重是最低的 $1 最高 也等于${1:} ${1: name} 1输入点的序号(1权重最高) name 自动补全的默认值 <conte ...
- directsound 应用实例
sdk里边有个文件夹Samples\C++\XInput\AudioController这个就是
- iOS把两张图片合成一张图片
0x00 步骤 先读取两张图片把创建出CGImageRef 创建上下文画布 把图片依次画在画布指定位置上 从上下文中获得合并后的图片 关闭上下文 释放内存 0x01 代码实现 - (void)comp ...
- phpcms V9 内容模型管理(转)
转自:http://www.cnblogs.com/Braveliu/p/5102627.html [1]理解模型 模型,系统知识的抽象表示.既然抽象了,那就得脑补一下.大家都是面向对象设计的专业人员 ...
- 执行*.sh脚本时提示Permission denied
使用chmod修改.sh的权限 chmod u+x *.sh 再次执行
- linux 获取cpu百分比
vmstat 1 |head -n 4 |tail -n 1 |awk '{print $13}'
- GRUB配置
参数讲解: default :定义缺省启动的系统 如果安装多系统的话 会有多个title 信息 可以通过设置 default: 来改变启动那个系统 默认第一个为0 第二个为1 依次类推 timeout ...