История изменений
Исправление
stevejobs,
(текущая версия)
:
1) там был CSV сделанная приложением Microsoft Excel, с особенным способом расставленными двойными кавычками или что-то такое, давно было это, неважно. Стандартный fgetcsv такое не читает.
2) твой стандартный fgetcsv читает в массив. В массив, Карл! А что будет, если туда загрузят файл размером 2 гигабайта? У правильного csv-парсера должен быть метод «считать следующую ячейку/координату/строку», с запоминанием на какой логической строке/ячейке/координате и по какому смещению в файле ты остановился - тогда можно будет обрабатывать хоть терабайтные данные. И вот поверх этой штуки уже можно написать функцию getcsv, которая вернет массив (вызывая «дай следующую ячейку пока не EOF/EOS»). Или если уж ОЧЕНЬ нужен сразу array, можно создать array из ленивых прокси-элементов, и потом их как-то хитро заполнять с помощью кэша при первом обращении. Но создатели PHP и тут отожгли, и написали свою быдлокодерскую фигню, возвращающую array реальных строк.
3) > учитывая потребление памяти php, даже эти 100Кб могут нехило занять места в памяти
сервер с 512 гигабайтами оперативной памяти спасет отца русской демократии - судя по всему создатели PHP именно так и думают
Сейчас пилю приложение, меньше чем на 4Гб оно даже не запускается, не говоря уж обработать какие-то данные. НО эти гигабайты тратятся на дело, а не на бред типа считывания CSV целиком в память
Исходная версия
stevejobs,
:
1) там был CSV сделанная приложением Microsoft Excel, с особенным способом расставленными двойными кавычками или что-то такое, давно было это, неважно. Стандартный fgetcsv такое не читает.
2) твой стандартный fgetcsv читает в массив. В массив, Карл! А что будет, если туда загрузят файл размером 2 гигабайта? У правильного csv-парсера должен быть метод «считать следующую ячейку/координату/строку», с запоминанием на какой логической строке/ячейке/координате и по какому смещению в файле ты остановился - тогда можно будет обрабатывать хоть терабайтные данные. И вот поверх этой штуки уже можно написать функцию getcsv, которая вернет массив (вызывая «дай следующую ячейку пока не EOF/EOS»). Или если уж ОЧЕНЬ нужен сразу array, можно создать array из ленивых прокси-элементов, и потом их как-то хитро заполнять с помощью кэша при первом обращении. Но создатели PHP и тут отожгли, и написали свою быдлокодерскую фигню, возвращающую array реальных строк.
3) > учитывая потребление памяти php, даже эти 100Кб могут нехило занять места в памяти
сервер с 512 гигабайтами оперативной памяти спасет отца русской демократии. Сейчас пилю приложение, меньше чем на 4Гб оно даже не запускается, не говоря уж обработать какие-то данные