LINUX.ORG.RU

История изменений

Исправление 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Гб оно даже не запускается, не говоря уж обработать какие-то данные