PHP实现即时将结果输出到浏览器
来源:互联网 发布:apache 安装版 编辑:程序博客网 时间:2024/06/05 05:35
web开发中有没有碰到需要适时的将结果输出到浏览器页面而不刷新整个页面的需求呢?当你在处理一个过程需要耗时很长,但你又需要适时的知道程序当前的处理状况的时候,该怎么办呢?下面就分享一下如何使用php及时的输出当前结果到浏览器而不刷新整个页面的效果吧。
下面以一个简单的例子来说明这个问题。首先来看一段代码:
1
<?php
2
for
(
$i
=0;
$i
<10;
$i
++){
3
echo
$i
;
4
sleep(1);
5
}
6
?>
上面这段程序如果在PHP解释器中执行,每秒会输出一个数,和预计效果一样。但在浏览器中访问时,结果却是浏览器在十秒之后一次性地显示了所有结果。对于这个问题,我们可以使用 ob_flush() 和 flush() 来强制刷新浏览器缓存,程序改为:
1
<?php
2
//author www.phpernote.com
3
for
(
$i
=0;
$i
<10;
$i
++){
4
echo
$i
;
5
ob_flush();
6
flush
();
7
sleep(1);
8
}
9
?>
问题解决,但又出来个问题,浏览器还不兼容了。实际测试中只有 Firefox 按预计效果即时输出了结果,而在 IE Safari Opera 等浏览器中还是一次性的输出结果。查阅相关资料发现是因为不同的浏览器对缓冲的处理方式不同,Firefox 在被要求强制刷新缓存时很听话,而IE需要在接收到256个字节后才会将内容即时展现在界面上,Safari 需要1024个字节,Opera 更有个性,只有在遇到HTML标签的时候才会即时输出(Safari也是如此)。
对于以上问题,针对IE和Safari,可以在输出结果之前先输出大于限定数目的空白字符:
1
<?php
2
echo
str_repeat
(
" "
,1024);
3
for
(
$i
=0;
$i
<10;
$i
++){
4
echo
$i
;
5
ob_flush();
6
flush
();
7
sleep(1);
8
}
9
?>
而对于Opera、Safari遇到HTML标签后才会即时输出的问题,由于一般我们不会只往浏览器中输出纯文本内容,故可以不作考虑。对于上面的程序,可以在输出结果中加入HTML标签来达到目的:
1
<?php
2
echo
str_repeat
(
" "
,1024);
3
for
(
$i
=0;
$i
<10;
$i
++){
4
echo
$i
.
"<br>"
;
5
ob_flush();
6
flush
();
7
sleep(1);
8
}
9
?>
至此已基本实现了在各个浏览器中达到一致的效果了,至于实际工作中,你可能是另外一种目的但是需要类似这种效果,则只需要根据需要做相应的修改即可。
- PHP实现即时将结果输出到浏览器
- 使PHP即时输出结果到浏览器
- 使PHP即时输出结果到浏览器
- PHP即时输出结果到浏览器
- PHP 即时输出到页面
- PHP实现即时输出信息
- 将结果输出到文档
- IIS7下php实现即时输出
- 如何将PHP的结果输出到非PHP页面中
- paypal即时到账php实现代码
- 将qemu模拟的串口数据即时输出到stdio
- PHP实现即时输出、实时输出内容方法
- 关于php关闭输出缓存,实现即时输出
- 将ping结果输出到txt文件
- 将make编译结果输出到文件
- wget 将结果直接输出到终端
- awk 将结果输出到不同文件
- 将ping命令结果输出到文本
- gridView 导出
- Linux下用c语言实现发送http请求 方式可以Get或者Post
- vi 常用命令行
- RAC 实例不能启动
- sbt中使用log4j
- PHP实现即时将结果输出到浏览器
- 【Node】模块加载过程
- oracle 等待事件查询
- print spooler服务经常被自动关闭,导致打印不起来
- linux编程学习笔记(十二) 遍历目录
- 获取POSIX视图属性---POSIX
- ESRI支持的ISO/TC 211国际标准
- 拓展聋哑儿童交流的空间和渠道---基于Kinect的手语实时翻译系统
- linux 压缩文件的命令总结