Задать вопрос
CartmanGui
@CartmanGui

Как работать с большим csv файлом?

Есть csv файл с большим количеством строк нужно реализовать возможность его обработки по частят т/к у шараварных хостеров время на выполнение php скрипта ограничено и из-за этого весь csv не успевает обработаться. Есть решение узнать количество строк разбить файл на n частей после чего через ajax дергать скрипт который бы считывал нужное количество строк но тут возникает проблема что каждый раз нужно открывать файл и в цикле пробегая по строкам пропускать уже ранее обработанные
$handle = fopen($file, "r");
$rows = 0;
while($csv = fgetcsv($handle)) {
		if($rows>= $stop) {
			break;
		}
		if($rows < $start) {
			$rows++;
			continue;
		}
		...
	}
	fclose($handle);


Конечно можно сразу разбить сам файл на n файлов и работать уже на каждой итерации с ним на может есть какое то более изящное решение?
  • Вопрос задан
  • 3018 просмотров
Подписаться 2 Оценить Комментировать
Ответ пользователя xmoonlight К ответам на вопрос (7)
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
filesize, fopen, fseek, fgets - должны помочь пропускать уже обработанные строки.
1. Считываете по-символьно строку за строкой, всегда определяете максимальное время обработки одной строки.
2. Как только превышен максимальный лимит времени минус 3*макс. время одной строки (3-й запас), то запоминаем позицию и останавливаем чтение из файла.
3. Позицию для продолжения - передаём (возвращаем) в ajax (в браузер)
4. Используя эти параметры, при запуске скрипта вызываем seek на стартовую позицию и продолжаем обработку файла.
Ответ написан