简单的PHP AJAX文件读取进度问题!

时间:2009-08-25 11:15:07

标签: php ajax file

好吧,我不太擅长描述这些事情,所以请耐心等待。

我试图找到一种显示状态/进度条的方式,以显示php已读取/解析了多少文本文件的百分比(或其他)。我大致知道自己需要做什么(无论是通过计算行,还是文件大小和实际文本文件的大小),但我不知道如何实际实现它。我正在使用PHP / AJAX,我真正想要的是每隔一段时间(5秒钟或更长时间)更新一个div以显示状态,直到完成所有操作,然后显示输出。很简单,虽然我该怎么做,但我不知道。我已经在这里发现了一些非常有用的帖子,但我没有任何东西可以与我所拥有的东西一起工作。

如果有人能给我一些粗略的提示/想法,我会非常感激(这真的是我的头脑)! 提前谢谢!

2 个答案:

答案 0 :(得分:1)

怎么样......

我们必须假设有一些方法来确定总工作(100%)和php脚本所处的位置(%完成状态),所以如果它正在读取/解析文本文件,你可能会有解析函数首先将总行数写入db或文本文件。然后它还可以每5秒将相同文件的行号写入。 js ajax函数调用该文本文件以获取它所在的总数和点数。当php文本解析器完成后,它会破坏状态文件以防止它占用服​​务器空间,文件名冲突等。


示例:

首先,(jquery)ajax函数POST到服务器:

 $.post("parser.php", { file: "somefile.txt"} );
 //I admit, I'm not sure if this is how a file would be posted with ajax

接下来,php拉取文件并启动解析器功能:

    $tmpName  = $_FILES['userfile']['tmp_name'];
    $fileName  = $_FILES['userfile']['name'];

    //Turn the file into an array, so that you can use the array count for status:
    $content = file($tmpName);

    // Get the array count as the total, as it equals the line count:
    $total = count($content);

    //Write the filesize to a unique "total" txt file:
    $total_file = fopen($fileName."-total.txt", 'x');
    fwrite($total_file, $total);
    fclose($total_file);

    //Pass the Array to the parser function:
    parser($content, $fileName);

    //Kill the file when the function is done:
    unlink($fileName);

    function parser ($file_array, $filename) {
           //creates the status file and then closes it, to ensure that it
           //exists for the loop but gets overwritten each time

           $status_file = fopen($filename."-status.txt", 'x');
           fclose($status_file);

           foreach($file_array as $position => $data) {
                  //Do your parsing here //
                   .............
                  //reopen status file and wipe out what is in it already:
                  $status_file = fopen($filename."-status.txt", 'w');
                  fwrite($status_file, $position);
                  fclose($status_file);
             }

       }

因此,由于状态和总文件共享上传文件的希望唯一名称,因此ajax函数知道要查找的位置。它可以做到这一点:

 total = $.get("somefile-total.txt");

 current = $.get("somefile-status.txt");

 status = current/total;

答案 1 :(得分:0)

JQuery提供了一些非常好的库,可以满足您的要求。除非这纯粹是出于学习目的,否则我会看一下这些并避免重建轮子。

http://plugins.jquery.com/search/node/upload