PHP+JavaScript 实现动态显示服务器端运行进度条(转) _PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > PHP+JavaScript 实现动态显示服务器端运行进度条(转)

PHP+JavaScript 实现动态显示服务器端运行进度条(转)

 2010/12/25 0:02:59  jimphei  http://jimphei.javaeye.com  我要评论(0)
  • 摘要:我有一个PHP程序,需要循环调用XMLRPC500次左右,运行20多分钟。当程序运行的时候,客户端只有一片空白的页面,浏览器的状态一直是load。作为用户来说,这种等待是漫长的,埋怨也就多了。解决思路如果有个进度条呈现在用户面前,告诉用户服务器端正在干嘛,当前运行了多少,问题就可以得到基本解决,虽然没有减少服务器端的运行时间,但用户的心里会有微妙的变化,感觉不再是枯燥无味的等待,至少等待还有个盼头:)。考虑到每一次调用XMLRPC比较耗时,所以可以在每一次调用时使用PHP的flush(
  • 标签:PHP 实现 进度条 运行 Java 服务器 服务

我有一个 PHP 程序,需要循环调用 XMLRPC 500 次左右,运行 20 多分钟。当程序运行的时候,客户端只有一片空白的页面,浏览器的状态一直是 load。作为用户来说,这种等待是漫长的,埋怨也就多了。

解决思路

如果有个进度条呈现在用户面前,告诉用户服务器端正在干嘛,当前运行了多少,问题就可以得到基本解决,虽然没有减少服务器端的运行时间,但用户的心里会有微妙的变化,感觉不再是枯燥无味的等待,至少等待还有个盼头 :) 。

考虑到每一次调用 XMLRPC 比较耗时,所以可以在每一次调用时使用 PHP 的 flush() 函数输出一段 JavaScript 对客户端浏览器中进度条显示进行动态更新。


<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><?php
if?('source'?==?$_GET['act'])??//查看源代码
{
????show_source($_SERVER["SCRIPT_FILENAME"]);
?????exit;
}
set_time_limit(0);

for?($i?=?0;?$i?<?500;?$i++)
{?
????$users[]?=?'Tom_'?.?$i;
}

$width?=?500;???//显示的进度条长度,单位?px
$total?=?count($users);?//总共需要操作的记录数
$pix?=?$width?/?$total;?//每条记录的操作所占的进度条单位长度
$progress?=?0;??//当前进度条长度
?>

<html>
<head>
<title>动态显示服务器运行程序的进度条</title>
<meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312"?/>
<meta?name="Generator"?content="JEdit">
<meta?name="Author"?content="Krazy?Nio">
<style>
body,?div?input?
{?font-family:?Tahoma;?font-size:?9pt?}
</style>
<script?language="JavaScript">
<!--
function?updateProgress(sMsg,?iWidth)
{?
????document.getElementById(
"status").innerHTML?=?sMsg;
????document.getElementById(
"progress").style.width?=?iWidth?+?"px";
????document.getElementById(
"percent").innerHTML?=?parseInt(iWidth?/?<?php?echo?$width;??>?*?100)?+?"%";
}

//-->
</script>????
</head>
<body>
<div?style="margin:?4px;?padding:?8px;?border:?1px?solid?gray;?background:?#EAEAEA;?width:?<?php?echo?$width+8;??>px">
??
<div><font?color="gray">如下进度条的动态效果由服务器端?PHP?程序结合客户端?JavaScript?程序生成。</font></div>
??
<div?style="padding:?0;?background-color:?white;?border:?1px?solid?navy;?width:?<?php?echo?$width;??>px">
????
<div?id="progress"?style="padding:?0;?background-color:?#FFCC66;?border:?0;?width:?0px;?text-align:?center;??height:?16px"></div>?
??
</div>
??
<div?id="status">&nbsp;</div>
??
<div?id="percent"?style="position:?relative;?top:?-30px;?text-align:?center;?font-weight:?bold;?font-size:?8pt">0%</div>
</div>
<?php
flush();????//将输出发送给客户端浏览器
foreach?($users?as?$user)//在此处使用空循环模拟较为耗时的操作,实际应用中需将其替换;若你的操作不耗时,我想你就没必要使用这个脚本了)
{?
????for?($i?=?0;?$i?<?10000;?$i++)?{?
????;;
}
?>
<script?language="JavaScript">
updateProgress(
"正在操作用户“<?php?echo?$user;??>”?.",?<?php?echo?min($width,?intval($progress));??>);
</script>
<?php
flush();????//将输出发送给客户端浏览器,使其可以立即执行服务器端输出的?JavaScript?程序。
$progress?+=?$pix;????
}???//end?foreach
//??最后将进度条设置成最大值?$width,同时显示操作完成
?>
<script?language="JavaScript">
updateProgress(
"操作完成!",?<?php?echo?$width;??>);
</script>
<?php
flush();
?>
<input?type="button"?value="查看源码"?onclick="document.location.href='<?php?echo?$_SERVER['PHP_SELF'];??>?act=source'"?/>
</body>
</html>

发表评论
用户名: 匿名