【Php】一个在页面缓缓输出效果的例子

/**
 * Author:RDP
 * My mail:abel1314520@gmail.com
 * My blog: blog.teamhaka.com/

*/


类似于一些开源系统在安装时,会在页面无刷新的输出实时安装状态一样的效果。
实际上是利用不等系统缓存达到一定字节就把已输出的内容交给客户端的原理。(一般为了输出效率,系统会在输出内容积累到一定容量时,再一齐交付给客户端的)

下例在linux服务器和windows服务器上、以及ff5.0和ie8上测试通过无问题

$text = <<< EOM
《送别》

长亭外
古道边
芳草碧连天
晚风拂柳笛声残
夕阳山外山
天之涯
地之角
知交半零落
一壶浊酒尽余欢
今宵别梦寒
EOM;

header( 'Content-Type: text/html;charset=utf-8' );//header必须! 有些浏览器可能会在接收html标记的开头之前缓存内容  比如对FF5.0就是如此

$space = str_repeat(" ",4096);//输出4096个空格
//1 一些版本的 Microsoft Internet Explorer 只有当接受到的256个字节以后才开始显示该页面,所以必须发送一些额外的空格来让这些浏览器显示页面内容。
//2 一些Web服务器的output_buffering默认是4069字符或者更大,即输出内容必须达到4069字符服务器才会flush刷新输出缓冲,为了确保flush有效,最好在ob_flush()函数前有此填充处理

$textArray = explode("\n",$text);

foreach($textArray as $contents){
	echo $contents.'';
	if(connection_aborted() ){
		/* 检查客户端是否已经断开 */
		exit;
	}
 	echo $space;//填充
	ob_flush();//开启缓存的情况下,脚本输出的内容存入了输出缓存中 ,这时没有处于等待输出状态的内容,你直接使用flush()不会向客户端发出任何内容。而 ob_flush()的作用就是将本来存在于输出缓存中的内容取出来,设置为等待输出状态,但不会直接发送到客户端 ,这时你就需要先使用 ob_flush()再使用flush(),客户端才能立即获得脚本的输出
	flush();//刷新PHP程序的缓冲  将当前为止程序的所有输出发送到用户的浏览器
	sleep(1);
}

echo 'ok';


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值