我正在使用PHP从CSV文件中公开车辆GPS数据。超过70辆车至少每30秒捕获一次该数据,包括19列数据。这会产生数千行数据,文件大小约为614kb。新数据将附加到文件末尾。我需要为每辆车提取最后一行数据,这应该代表最近的状态。我能够为每个单元拉出一行,但由于CSV文件是按时间顺序排列的,因此我将删除文件中最旧的数据而不是最新的数据。是否可以从头到尾阅读CSV?我已经看到了一些解决方案,但是它们通常涉及将整个文件加载到内存中然后将其反转,这听起来非常低效。我还有其他选择吗?感谢您提供任何建议。
编辑 :我正在使用此数据即时映射实时位置。数据仅以CSV格式提供给我,因此我认为导入数据库是不可能的。
答案 0 :(得分:4)
使用fseek,您可以将指针设置为文件的末尾,并将其偏移为负值以向后读取文件。
答案 1 :(得分:0)
如果必须使用csv文件而不是数据库,那么也许你可以逐行读取文件。这将防止超过最后一行存储在内存中(感谢垃圾收集器)。
$handle = @fopen("/path/to/yourfile.csv", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
// old values of $last are garbage collected after re-assignment
$last = $line;
// you can perform optional computations on past data here if desired
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
// $last will now contain the last line of the file.
// You may now do whatever with it
}
编辑:我没有看到fseek()帖子。如果你需要的只是最后一行,那么这就是你要走的路。