У меня есть интеграция файла xlsx для записи из базы данных с помощью phpexcel. Я хочу написать 3 000 000 записей в файле xlsx. Но это до конца Неустранимая ошибка: недостаточно памяти (выделено 1979711488) (попытка выделить 131072 байта)
Моя версия PHP 5.3.28
Также я установил php ini и кеш ячейки, см. Мой код ниже
ini_set('max_execution_time',-1);
ini_set('memory_limit', '-1');
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_in_memory_gzip;
$cacheSettings = array( ' memoryCacheSize ' => '-1');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
Я с нетерпением жду вашего ответа.
Спасибо
Поскольку вы пытаетесь написать очень большое количество записей, возможно, что даже если вы используете методы кэширования, предоставляемые PHPExcel, вы все равно столкнетесь с ошибками OutOfMemory. Или что ваш сценарий займет слишком много времени, чтобы закончить (слишком долго, чтобы быть приемлемым).
Если это то, что вы видите, я могу порекомендовать вам взглянуть на Носик: https://github.com/box/spout. Это альтернатива PHPExcel, которая была создана для решения именно вашей проблемы. Вы можете выбросить столько записей, сколько захотите, библиотека сможет записывать их, не требуя дополнительных настроек.
Написание файла XLSX так просто:
$writer = WriterFactory::create(Type::XLSX);
$writer->openToFile($filePath);
while (...) {
$writer->addRow($singleRow);
}
$writer->close();
Других решений пока нет …