PHP, парсер больших CSV файлов

12
chemax
На сайте с 07.01.2009
Offline
206
4856

Добрый день.

Есть пример кода парсинга больших csv файлов? Файл примерно 200-300 мб.

Суть еще в том, что на одну строку большое кол-во запросов mySQL, обработка долгой получается и выдает ошибку 504. Возможно считывать построчно? Если возможно, то как? Желательно с примером:)

Качественный хостинг, VPS и сервера. (http://ihc.ru/?ref=569)
EA
На сайте с 15.06.2006
Offline
70
#1

можно порезать на мелкие файлы например http://stackoverflow.com/questions/5391304/split-big-files-using-php

R1
На сайте с 24.06.2009
Offline
64
#2

а обязательно ли парсить исходный csv с помощью пхп?

как на счет подключиться к мускулю через консоль и загрузить все напрямую в таблицу? через

load data local infile "путь/к/файлу" into table db.table fields terminated by ';' lines terminated by '\n' (pole1, pole2, pole3, pole4, pole5);

тоже самое из скрипта пхп:

mysql_query('load data local infile "путь/к/файлу" into table db.table fields terminated by \';\' lines terminated by \'\n\' (pole1, pole2, pole3, pole4, pole5)');

как вариант

u3Bepr
На сайте с 03.03.2011
Offline
60
#3

можно еще весь csv вкинуть в мускул и потом через цикл в пхп тянуть что нужно. пример


LOAD DATA INFILE 'file.csv' INTO TABLE new_table
CHARACTER SET utf8
FIELDS TERMINATED BY ',' ENCLOSED BY ''
LINES TERMINATED BY '\n';
ДП
На сайте с 23.11.2009
Offline
203
#4

А еще можно парсить консольным скриптом и поставить ему неограниченную настройку времени выполнения - это чтобы 504 ошибки веб-сервера не было, т.е. исключить веб-сервер из процесса.

chemax
На сайте с 07.01.2009
Offline
206
#5
rec108:
а обязательно ли парсить исходный csv с помощью пхп?
как на счет подключиться к мускулю через консоль и загрузить все напрямую в таблицу? через
load data local infile "путь/к/файлу" into table db.table fields terminated by ';' lines terminated by '\n' (pole1, pole2, pole3, pole4, pole5);

тоже самое из скрипта пхп:
mysql_query('load data local infile "путь/к/файлу" into table db.table fields terminated by \';\' lines terminated by \'\n\' (pole1, pole2, pole3, pole4, pole5)');
как вариант

Если одна строка будет

1;2;3;4;5;6

А другая

1;2;3

?

Зальет в mysql?

R1
На сайте с 24.06.2009
Offline
64
#6

только что провел тест)

тестовый файл

тестовый скрипт (доступен из веб)

результат

chemax
На сайте с 07.01.2009
Offline
206
#7
rec108:
только что провел тест)
тестовый файл


тестовый скрипт (доступен из веб)


результат

Спасибо большое) Очень помогли)

Bush
На сайте с 19.07.2006
Offline
108
#8

Всегда построчно CSV читал, проблем с большими файлами не было.

Пример есть: http://www.php.net/manual/en/function.fgets.php или http://www.php.net/manual/en/function.fgetcsv.php

siv1987
На сайте с 02.04.2009
Offline
427
#9

fgetcsv - читает построчно и разбирает csv. Еще и делимитер можно указать.

doctorpc
На сайте с 12.07.2009
Offline
112
#10

В HeidiSQL есть стандартная функция Tools -> Import CSV file..

До сих пор у меня с ней проблем не было. Достаточно гибкие настройки импорта.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий