gpt4 book ai didi

php - 如何使用文本文件中获得的数据绘制实时图形(直方图)

转载 作者:行者123 更新时间:2023-12-01 02:50:41 29 4
gpt4 key购买 nike

我有一个由服务器上的程序生成的连续生成的数据(文本文件)。我想将数据绘制为实时图表,就像 powergrid做。这是我的方法:

由于数据是在服务器上以文本文件的形式连续生成的,因此我编写了一个 PHP 脚本来读取该文件 (get_file_contents)、输出数据点并使用 sparkline 绘制图表。 jQuery 插件。但问题是它一次读取所有文件。而且,文本文件不断增长。谁能建议我更好的方法?

最佳答案

当您谈论使用 Javascript 绘图解决方案时,您将执行以下操作:

  • 在页面加载时,您可以通过读取完整的文本文件并记住其大小来创建当前图表。
  • 加载页面后,您创建一个 Javascript 函数,该函数使用 AJAX 技术 (XMLHttpRequest) 定期轮询服务器上的特定脚本,并将文本文件的最后已知文件大小作为参数传递.
  • 您的轮询脚本采用文件大小参数,打开文本文件,跳过文件,直到到达您上次读取文件的位置(文件大小参数)。
  • 轮询脚本返回从文件大小到文件末尾和新文件站点的所有可用数据
  • 您的 Javascript 读取 AJAX 响应并将所需的绘图点添加到您的图表中
  • 然后您可以使用新文件大小作为参数重新轮询服务器端脚本

此过程涉及服务器端和客户端编程,但可以轻松完成。

以下是一个示例轮询脚本,需要一个 index 参数,该参数告诉脚本从哪个位置读取文本文件并返回 JSON 编码的绘图点列表和新的索引指针。

// poll.php
$index = (isset($_GET['index'])) ? (int)$_GET['index'] : 0;
$file = fopen('path/to/your/file.txt', 'r');
$data = array(
'index' => null,
'data' => array()
);
// move forward to the designated position
fseek($file, $index, SEEK_SET);
while (!feof($file)) {
/*
* assuming we have a file that looks like
* 0,10
* 1,15
* 2,12
* ...
*/
list($x, $y) = explode(',', trim(fgets($handle)), 2);
$data['data'][] = array('x' => $x, 'y' => $y);
}
// set the new index
$data['index'] = ftell($file);
fclose($file);

header('Content-Type: application/json');
echo json_encode($data);
exit();

相应的 Javascript/jQuery 片段可能是:

// the jQuery code to poll the script
var current = 0;
function pollData() {
$.getJSON('poll.php', { 'index': current }, function(data) {
current = data.index;
for (var i= 0; i < data.data.length; i++) {
var x = data.data[i].x;
var y = data.data[i].y;
// do your plotting here
}
});
}
// call pollData() every 5 seconds
var timer = window.setInterval(pollData, 5000);

请注意,这只是一个示例,它缺少所有错误检查(例如,在同一页面上并发调用 pollData() 将会出现问题)。

关于php - 如何使用文本文件中获得的数据绘制实时图形(直方图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1728937/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com