在PHP中从头到尾阅读CSV
问题描述:
我正在使用PHP从CSV文件中公开车辆GPS数据。这些数据至少每30秒就会被超过70辆车辆捕获并包含19列数据。这会产生几千行约614kb的数据和文件大小。新数据被追加到文件的末尾。我需要提取每辆车的最后一行数据,这应该代表最近的状态。我能够为每个单元拉出一行,但是由于CSV文件是按照时间顺序排列的,因此我将取出文件中最旧的数据而不是最新的数据。是否可以从头到尾读取CSV?我已经看到了一些解决方案,但是它们通常涉及将整个文件加载到内存中然后反转,这听起来效率很低。我有其他选择吗?感谢您提供任何建议。在PHP中从头到尾阅读CSV
编辑:我正在使用这些数据来实时映射实时位置。数据仅以CSV格式提供给我,所以我认为导入数据库是不可能的。
答
如果您必须使用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()的帖子。如果你需要的只是最后一行,那么这就是要走的路。
也许在这种情况下csv不是保存的适当方式。为什么不使用数据库? – Ibu 2011-06-04 21:11:42
只需要几分钟时间将数据导出到数据库,我推荐使用mysql – Ibu 2011-06-04 21:12:11
@lbu:他/她可能正在使用多个系统之间的共享文件。如果是这样,我推荐使用web服务。 – Nabeel 2011-06-04 21:15:21