Простой PHP AJAX-файл Проблемы с прогрессом чтения! - PullRequest
2 голосов
/ 25 августа 2009

Хорошо, я не очень хорош в описании этих вещей, так что терпите меня ..

Я пытаюсь найти способ показать статус / индикатор выполнения, чтобы показать процент (или что-то еще) того, сколько текстового файла было прочитано / проанализировано php. Я примерно знаю, что мне нужно сделать (будь то путем подсчета строк или размера файла и размера фактического текстового файла), но я не могу на всю жизнь понять, как на самом деле это реализовать. Я использую PHP / AJAX, и все, что я действительно хочу, это чтобы каждый div обновлялся так часто (5 секунд или около того), чтобы показать статус, пока все не будет сделано, а затем показать вывод. Полегче, но как, черт возьми, я должен это делать, я не знаю. Я нашел несколько действительно полезных постов в этом отношении, но ничего такого, что я мог бы получить, чтобы работать с тем, что у меня есть.

Если кто-то может дать мне несколько грубых советов / идей, я был бы глупо благодарен (это действительно делает мою голову)! Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 25 августа 2009

Как насчет ...

Мы должны предположить, что есть какой-то способ определить общую работу (100%) и точку, в которой находится скрипт php (состояние% выполнено), поэтому, если он читает / анализирует текстовый файл, вы можете функция синтаксического анализа начинается с записи общего количества строк в дБ или текстовый файл. Затем он также может записывать, какой номер строки находится в том же файле каждые 5 секунд. Функция js ajax вызывает этот текстовый файл, чтобы получить сумму и точку, в которой он находится. Когда синтаксический анализатор php завершает работу, он уничтожает файл состояния, чтобы он не занимал место на сервере, конфликты имен файлов и т. Д.


Пример:

Во-первых, ajax-функция (jquery) отправляет на сервер:

 $.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;
0 голосов
/ 25 августа 2009

В JQuery есть несколько действительно хороших библиотек, которые выполняют именно то, что вы просите. Если это не только для учебных целей, я бы посмотрел на них и не стал восстанавливать колесо.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...