如何显示进度?

时间:2011-08-12 15:19:29

标签: php progress

我有一个周期。它需要相当长的时间,我需要可视化过程工作。怎么做?

while ($csvIterator->next()) {
 //a lot of code...
 visualizeProcess();
 }

4 个答案:

答案 0 :(得分:1)

您的问题确实需要更多细节。如果您需要详细的百分比条形指示,如loading bar

然后你需要将你的循环数据分成几部分(使用迭代计数/总迭代次数或读取的字节数等)。

THIS GUIDE将为您提供必要的知识。

另一方面,如果你需要一个像着名的ajax load gif这样的加载指示器,那么你所做的就是gatta(我们假设你有jquery而你的脚本只有进程)是

$("#myButton").click(function(){
    $("#myLoaderGif").show();
    $.get("myPHPScript.php", function(data){
           alert("Data Loaded: " + data);
           $("#myLoaderGif").hide();
    })});

此示例假设您的加载图片有<img id="myLoaderGif">标记,而id = myButton的某个元素启动了脚本,而您使用get来检索数据

答案 1 :(得分:0)

在循环中间使用echovar_dump。同样implicit_flush可能会影响详细程度。

答案 2 :(得分:0)

修改

- 这假设您使用PHP进行基于Web的应用程序。

简而言之,没有简单的方法可以做到这一点。在很多方面你需要巧妙地设计你的应用程序来处理它(即:如果你逐个构建一个页面,那么如果它应该被保护会发生什么?你需要实现SSL和确保所有AJAX调用都已加密)。基本上你需要做的是让脚本可执行的脚本,而不是一个完全独立完成操作的循环。例如,有一个php文件,它接受一个整数作为查询字符串,然后使用该整数执行不同的操作。一旦整数等于某个数字,您就可以确定您需要做的所有事情都已完成,因此进度使其达到100%。你不能让PHP一页一页地发送回浏览器,这就是你想要做的事情。您需要使用AJAX调用(假设这是一个Web应用程序而不是命令行应用程序)。做类似以下的事情:

  1. 创建一个PHP文件,通过查询字符串接收int。传递的整数指示PHP脚本执行的操作(即:0 =获取分配的所有会话变量,1 =连接到数据库并获取需要解析的数据并将其推送到会话中,2 =解析来自会话的数据并做一些事情。)

  2. 创建一个PHP文件,该文件将作为显示进度的基页提供给客户端。在此页面中,您将需要使用Javascript通过各种查询字符串请求1中提到的页面。您发出的AJAX调用具有成功和失败处理程序,在这些调用中,您将能够更改页面上显示的内容以反映该过程的进展情况。

  3. 简而言之,由于其分发的性质,没有简单的方法来为Web应用程序执行进度条。我建议您查看GET和POST请求的工作方式,Web服务器的功能以及PHP处理程序与Apache协同工作的方式,以便更好地了解您的初始方法不可行的原因。

答案 3 :(得分:0)

最好的使用方法是JavaScript,但您可以使用

flush()

功能