好吧,我不太擅长描述这些事情,所以请耐心等待。
我试图找到一种显示状态/进度条的方式,以显示php已读取/解析了多少文本文件的百分比(或其他)。我大致知道自己需要做什么(无论是通过计算行,还是文件大小和实际文本文件的大小),但我不知道如何实际实现它。我正在使用PHP / AJAX,我真正想要的是每隔一段时间(5秒钟或更长时间)更新一个div以显示状态,直到完成所有操作,然后显示输出。很简单,虽然我该怎么做,但我不知道。我已经在这里发现了一些非常有用的帖子,但我没有任何东西可以与我所拥有的东西一起工作。
如果有人能给我一些粗略的提示/想法,我会非常感激(这真的是我的头脑)! 提前谢谢!
答案 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提供了一些非常好的库,可以满足您的要求。除非这纯粹是出于学习目的,否则我会看一下这些并避免重建轮子。