PHP实现即时将结果输出到浏览器

web开发中有没有碰到需要适时的将结果输出到浏览器页面而不刷新整个页面的需求呢?当你在处理一个过程需要耗时很长,但你又需要适时的知道程序当前的处理状况的时候,该怎么办呢?下面就分享一下如何使用php及时的输出当前结果到浏览器而不刷新整个页面的效果吧。

下面以一个简单的例子来说明这个问题。首先来看一段代码:

<?php
for($i=0;$i<10;$i++){
    echo $i;
    sleep(1);
}
?>

上面这段程序如果在PHP解释器中执行,每秒会输出一个数,和预计效果一样。但在浏览器中访问时,结果却是浏览器在十秒之后一次性地显示了所有结果。对于这个问题,我们可以使用 ob_flush() 和 flush() 来强制刷新浏览器缓存,程序改为:

<?php
//author www.Alixixi.com
for($i=0;$i<10;$i++){
    echo $i;
    ob_flush();
    flush();
    sleep(1);
}
?>

问题解决,但又出来个问题,浏览器还不兼容了。实际测试中只有 Firefox 按预计效果即时输出了结果,而在 IE  Safari Opera 等浏览器中还是一次性的输出结果。查阅相关资料发现是因为不同的浏览器对缓冲的处理方式不同,Firefox 在被要求强制刷新缓存时很听话,而IE需要在接收到256个字节后才会将内容即时展现在界面上,Safari 需要1024个字节,Opera 更有个性,只有在遇到HTML标签的时候才会即时输出(Safari也是如此)。

对于以上问题,针对IE和Safari,可以在输出结果之前先输出大于限定数目的空白字符:

<?php
echo str_repeat(" ",1024);
for($i=0;$i<10;$i++){
    echo $i;
    ob_flush();
    flush();
    sleep(1);
}
?>

而对于Opera、Safari遇到HTML标签后才会即时输出的问题,由于一般我们不会只往浏览器中输出纯文本内容,故可以不作考虑。对于上面的程序,可以在输出结果中加入HTML标签来达到目的:

<?php
echo str_repeat(" ",1024);
for($i=0;$i<10;$i++){
    echo $i."<br>";
    ob_flush();
    flush();
    sleep(1);
}
?>

至此已基本实现了在各个浏览器中达到一致的效果了,至于实际工作中,你可能是另外一种目的但是需要类似这种效果,则只需要根据需要做相应的修改即可。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索问题
, 浏览器
, 输出结果和解释
, 结果
, 输出
, 效果
, 输出结果
, 输出问题
, 输出效果
, 结果输出
, 即时输出
即时
php实现在线即时聊天、php 实现即时消息提醒、php即时输出、php实现即时通讯、php如何实现即时通讯,以便于您获取更多的相关知识。

时间: 2024-09-09 09:24:17

PHP实现即时将结果输出到浏览器的相关文章

XMLHTTP下载远程数据输出到浏览器

xml|浏览器|数据|下载   利用xmlhttp对象获取远程的数据,然后用二进制输出到客户浏览器,让客户下载数据,此例从某一远程服务器获取一个压缩包,并且输出到浏览器提供客户下载.   程序代码:  <%  Response.Buffer = True   Dim objXMLHTTP, xml  Set xml = Server.CreateObject("Microsoft.XMLHTTP") '创建对象      xml.Open "GET",&quo

求助:想要输出到浏览器,效果却是下载该程序。

问题描述 环境是linux下,webserver使用的是thttpd,cgi程序使用c语言.预期目标为:某连接指向一个cgi程序,点击该连接效果为该cgi会调用execl执行另一个程序,将该程序执行结果输出到浏览器上.问题为:使用Content-Type:text/plain这个MIME头,在本机通过,用另一台机子测试结果为:chrome浏览器通过,而IE和firefox却是弹出下载该cgi的对话框.将MIME头改为Content-Type:text/html,都通过,但是html格式会去除多余

XMLHTTP下载远程数据输出到浏览器_XML/RSS

利用xmlhttp对象获取远程的数据,然后用二进制输出到客户浏览器,让客户下载数据,此例从某一远程服务器获取一个压缩包,并且输出到浏览器提供客户下载.   程序代码:  <%  Response.Buffer = True   Dim objXMLHTTP, xml  Set xml = Server.CreateObject("Microsoft.XMLHTTP") '创建对象   xml.Open "GET","http://www.4guysf

php读取图片内容并输出到浏览器的实现代码_php技巧

代码很简单,网上都能找到,但在我机子上就是显示不出来,显示出的一直是这个php文件路径, 费了点时间才搞定,原来是我的<?php这个标签前面有多的空格,删掉就ok了,细节问题,粗心得很,真的很无语. 网上查了下,有这样一说:如果php以图片,zip,exe等文件输出到浏览器,而前面还输出了其他字符,那就会是你看到的乱码.应该是输出图片前有输出空格或其他字符造成的,可以检查一下输出图片前有没有其他字符,如果是utf-8编码记得保存为无BOM的文件.相关代码如下: 复制代码 代码如下: class

Java即时获取控制台输出问题

问题描述 我想实现类似EclipseCDT控制台类似的功能,就是一个C程序,会间隔一段时间使用printf向控制台输出内容,然后Java程序可以立刻捕获,我用的代码如下,但是只能等C程序结束后才得到输出,大家帮忙看看有什么问题,多谢了.Runtimeruntime=Runtime.getRuntime();String[]cmdarray=newString[7];//省略命令行参数的初始化Processp=runtime.exec(cmdarray);finalInputStreampin=p

带checkbox的treeview输出到浏览器的问题.

问题描述 因为有个问题要涉及到javascript对treeview的checkbox的操作,我看了treeview在客户端的源码,好多的div,href,table,具体不知道它是怎么有这些标签拼成的,哪位能告诉我么? 解决方案 解决方案二:今天早上的目的是把0回复的顶起来解决方案三:顶起来解决方案四:该回复于2007-12-04 11:20:10被版主删除

php生成excel文件并输出到浏览器

本文介绍了php spreadsheet_excel_writer与如何生成excel文件. 第一步,安装spreadsheet_excel_writer 由于这包使用ole包,您可能需要安装它 执行以下命令来执行更新: 更新pear.php.net ole - 0.5 spreadsheet_excel_writer - 0.9.1 看一个实例,myfile.xls是文件名(包括路径),工作簿包含一个具有学生名单表 <?php require_once 'spreadsheet/excel/w

PHP如何获取一段时间内的日期列表

最近在做一个关于日程表的项目,给出一个开始时间和一个结束时间,需要列出这个时间段内的日期列表并同时判断是周几.经过研究,得出如下方法,和大家共享,方便有需要的朋友. 先贴一下此次需求的效果图: 下面是具体的代码片段: /* *参数分别是开始时间戳,结束时间戳 */ function timeList($beginTimeStamp,$endTimeStamp){ if(!is_numeric($beginTimeStamp)!is_numeric($endTimeStamp)($endTimeS

php获取目录所有文件并将结果保存到数组的程序

工作中有时会遇到需要将某个目录下的文件进行批量处理的操作,这个时候我们就需要将该目录下的所有符合条件的文件找出来并保存到一个结果集中,然后方便批量处理,通常做法是将其保存到一个数组中,然后循环处理,下面将该过程做一下记录. <?php //php获取目录所有文件并将结果保存到数组 foreach(glob("./*") as $d){ $tmp=explode(".",$d); $k=end($tmp); //如果是文件,并且后缀名为jpg png的文件 if