Как работают функции fputcsv, fgetcsv?

289
19 декабря 2016, 19:32

Обе функции fputcsv и fgetcsv работают со строками. Читают/пишут по одной строке, т.е., чтобы считать/записать в csv массив данных, делать это нужно в цикле

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

Как работают данные функции?

Если в массиве 10 тысяч строк, то это будет 10 тысяч обращений к файловой системе? Если что-то в этом духе, то не рациональнее ли сформировать строку и одним разом ее записать в файл?

Answer 1

Да, эти функции читают-пишут по одной строке. И это замечательно. Они и должны работать только так и никак иначе.

По поводу же страхов, вызванных воображаемой нерациональностью такого подхода, позволю себе процитировать высказывание великого программиста Н.Вирта:

Исправление воображаемых проблем с производительностью - корень всех зол.

Что означает: проблемы с производительностью надо исправлять только тогда, когда они есть. То есть, в данном случае надо сначала получить хоть какую-то проблему с производительностью при записи 10000 строк, и только потом пугаться и пытаться что-то исправить.

Answer 2

http://stackoverflow.com/questions/26210944/fputcsv-running-out-of-memory-during-creation-of-larger-files

А вообще смотрите в сторону perl и python. У них с обработкой строк и потоками - по проще будет.

READ ALSO
Убрать день из интервала

Убрать день из интервала

Интервал взят из текстового бокса в определенном форматеБеру начало и конец интервала

217
Правильное наследование классов в php

Правильное наследование классов в php

Есть к примеру 3 класса

212
Валидация поля, которое не передается из представления

Валидация поля, которое не передается из представления

У меня есть, к примеру, таблица Сообщений, в которой я записываю пользователя, который оставил сообщение

196