Обе функции fputcsv и fgetcsv работают со строками. Читают/пишут по одной строке, т.е., чтобы считать/записать в csv массив данных, делать это нужно в цикле
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
Как работают данные функции?
Если в массиве 10 тысяч строк, то это будет 10 тысяч обращений к файловой системе? Если что-то в этом духе, то не рациональнее ли сформировать строку и одним разом ее записать в файл?
Да, эти функции читают-пишут по одной строке. И это замечательно. Они и должны работать только так и никак иначе.
По поводу же страхов, вызванных воображаемой нерациональностью такого подхода, позволю себе процитировать высказывание великого программиста Н.Вирта:
Исправление воображаемых проблем с производительностью - корень всех зол.
Что означает: проблемы с производительностью надо исправлять только тогда, когда они есть. То есть, в данном случае надо сначала получить хоть какую-то проблему с производительностью при записи 10000 строк, и только потом пугаться и пытаться что-то исправить.
http://stackoverflow.com/questions/26210944/fputcsv-running-out-of-memory-during-creation-of-larger-files
А вообще смотрите в сторону perl и python. У них с обработкой строк и потоками - по проще будет.
Продвижение своими сайтами как стратегия роста и независимости