在foreach循环中运行函数时进度条

时间:2011-10-30 22:03:12

标签: php foreach progress-bar

我有一个foreach循环,它调用一个函数来设置数组的值。有时需要几个小时才能完成,具体取决于通过完成功能运行的次数。

我想要的是进度条或至少1/1000完成的类型进度指示器。

这可能吗?如果是这样,我怎么能在我的代码中实现它?它会在函数中还是在foreach循环中?正在研究并找到一些使用for和$ i ++的例子但是我不确定如何实现它,因为我已经使用了foreach循环。

非常感谢。

 function scrape_amazon($links) {
 //my code runs here to set all values in $ret array.
 }


 foreach($links as $link) {
$ret = scrape_amazon($link);
 }

2 个答案:

答案 0 :(得分:0)

我用这个,好吧,不是ajax,只做潮红,但不是那么难看。

我放置了一张图片

<img src='progress.gif' height=18 width=0 name=probar>

然后设置在服务器上完成的每个事件echo一行,然后flush

echo "<script language='JavaScript'>\ndocument.probar.width=".(($sys["probar_width"]/$task_all)*$task_i).";\n</script>\n";
flush();

如果您的服务器(例如apache)使用缓存(例如启用了gzip),它将无法正常工作。

答案 1 :(得分:0)

PHP可能不是真正适合此任务的工具,但您可以做的是:

  • 启动慢速代码作为后台进程,并将进度输出到文件。
  • 使用PHP脚本轮询该文件以获取进度信息(通过页面刷新或AJAX)

启动后台进程可以通过多种方式完成,包括:

  • 每隔60秒通过cron启动,并轮询在一些可读区域中假脱机的新作业
  • 通过网页上的fork / exec机制启动
  • 在系统启动时作为守护程序启动

需要一些努力来避免多次执行和/或重叠的问题。