php进度条?

时间:2009-10-22 00:14:20

标签: php progress-bar loading

有没有办法在php中显示进度条?我想让用户知道php脚本在做什么。

以下是我的网站http://www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book

的结果示例

我有一个静态加载图像,其中一些文本显示“正在加载...”,当页面完全加载时,我隐藏了加载div。我的PHP脚本发送到亚马逊api,ebay api和屏幕刮了几个其他网站,而不是静态加载div我想更新加载div与以下

加载amazon.com

//进展亚马逊,完成更新加载div

正在加载ebay.com

等。等

这可能吗?如果是最好的方法是什么?提前感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

使用AJAX询问PHP目前正在做什么,并建立一个队列系统来定义完成或未完成的任务。这是一个非常基本的例子:

任务开始时,设置以下变量:

$_SESSION['isEbayLoaded'] = false;
$_SESSION['isAmazonLoaded'] = false;

一旦PHP加载eBay,它会将isEbayLoaded设置为true,然后AJAX可以简单地询问PHP是否已经加载了ebay,然后是亚马逊,然后是你需要的任何其他东西。所有PHP必须做的是检查这些变量是否设置为true,这意味着任务已经完成。

答案 1 :(得分:1)

我之前用一个非常简单的解决方案完成了这个:

ob_flush();

所需要的只是创建一个具有适当类名的div:

<div class="loading">
    Loading...
</div>

然后,我的PHP基本上是:

foreach ($sites as $site) {
   printAndFlush(<<<CSS
     <style>
       div.loading {
         background: url($site.png) no-repeat right center;
       }
     </style>
CSS;

   scrapeSite($site);
}

这会使用背景样式来显示您要抓取的网站。

如果你必须使用标记,你可以每次打印一个新的“加载”div(使用唯一的ID),以及将前一个div的样式设置为“display:none”的样式。

当然,请记住,在渲染任何内容之前,某些浏览器需要至少1024个字节(少于4k!)。

答案 2 :(得分:0)

最好的方法是让你的javascript对服务器进行ajax调用并找出它的位置,这样你就可以向用户提供一些反馈。

您可以从上传进度条开始,然后继续显示应用程序的进度。

答案 3 :(得分:0)

我会为每个站点发出请求,并使用该页面的输出(XML,JSON等)让其他页面知道发生了什么。

例如......伪代码:

  • 收集网站
  • 用于加载ajax页面的循环
  • ajax页面返回每个请求,并带有状态消息,例如 - “加载亚马逊....”

就是这样!