开始在特定行读取大型csv而不迭代前一行

时间:2017-01-13 04:52:51

标签: php laravel-5.3

我正在尝试读取包含500 000行和81列的CSV文件并将其插入数据库中。 CSV大小为160 MB

以下是我的代码

$file    = fopen($path, 'r');
while (($line = fgetcsv($file)) !== FALSE) {
}

工作约1小时,访问大约100 000条记录,然后停止处理并显示错误"重置连接"。我已经尝试过增加PHP执行时间限制和内存限制,但这不是一个有效的解决方案。

我是否可以从特定行开始读取CSV而不迭代前一行?

1 个答案:

答案 0 :(得分:0)

你需要的神奇功能是fseek()。您可以记下上次结束的地方并继续处理。但是你需要记住,每一行都有不同的长度,因此在文件中找到正确的位置有点困难。

我建议首先摆脱CSV。使用具有固定行大小的Sqlite。