Как насчет ...
Мы должны предположить, что есть какой-то способ определить общую работу (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;