2009-10-22 43 views
2

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

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

的结果,例如,我有一些文字,上面写着静态加载图片“载入中...”,当页面完全加载,我隐藏加载股利。我的PHP脚本出去亚马逊API,易趣API和屏幕刮了几个其他网站和,而不是静态负载DIV我想更新加载分度以下

加载amazon.com

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

加载ebay.com

等等,等等

这是可能的吗?如果是的话,最好的办法是什么?预先感谢您的帮助!

回答

3

使用AJAX问PHP目前正在做什么,并有一个队列系统来定义哪些任务完成或没有完成。这里是一个非常简单的例子:

当任务开始时,使其设置下列变量:

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

一旦PHP负载易趣,也将有助于isEbayLoaded为true,然后AJAX可以简单地问PHP如果易趣载入了,然后亚马逊,然后无论你需要什么。所有PHP所要做的就是检查这些变量是否设置为true,这意味着任务已经完成。

+0

是否可以从主页面访问会话变量而无需重新加载该页面?这是你可能想要考虑的事情。 –

+0

会话变量正在被通过AJAX调用的页面读取,因此它们在主脚本中设置,它们应该在设置后可用于请求。否则,仍然可以使用临时文件或数据库来存储信息,然后在AJAX请求发出时读取这些信息。为了避免调用PHP,甚至可以将文件存储为.json,然后使用JavaScript来请求文件并处理有关完成哪些任务和哪些任务不完成的信息。 –

0

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

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

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,以及将前一个div的样式设置为“display:none”的样式。

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

+0

小细节,但您从不关闭PrintAndFlush函数中的圆括号。另外,我没有看到任何理由不止一次地打印样式标签。 –

+0

不是一个实际的功能,只是一个伪php功能。 风格标签不止一次打印的原因是由浏览器强制编译,因为每个