2

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

这是我的网站http://www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book的结果示例

我有一个静态加载图像,其中包含一些文本,上面写着“正在加载...”,当页面完全加载时,我隐藏了加载 div。我的 php 脚本输出到 amazon api、ebay api 和屏幕抓取其他几个站点,而不是静态加载 div,我想用以下内容更新加载 div

正在加载 amazon.com

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

正在加载 ebay.com

等等等等

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

4

4 回答 4

3

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

启动任务时,使其设置以下变量:

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

一旦 PHP 加载 eBay,它会将 isEbayLoaded 设置为 true,然后 AJAX 可以简单地询问 PHP 是否已加载 ebay,然后是 amazon,然后是您需要的任何其他内容。PHP 所要做的就是检查这些变量是否设置为 true,这意味着任务已经完成。

于 2009-10-22T00:23:01.493 回答
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 的样式设置为“显示:无”的样式。

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

于 2009-10-22T04:11:32.713 回答
0

最好的方法是让你的 javascript 对服务器进行 ajax 调用并找出它在哪里,这样你就可以给用户一些反馈。

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

于 2009-10-22T00:16:41.053 回答
0

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

例如...伪代码:

  • 收集站点
  • 加载ajax页面的for循环
  • ajax 页面返回带有状态消息的每个请求,例如 - “Loading Amazon....”

就是这样!

于 2009-10-22T18:54:54.680 回答