Задать вопрос
@driverx18

Как записать в PHPExcel очень много записей?

Нужно записать хотя бы +150к записей в PHPexcel, то есть в одной строчке должно быть заполнено 8-9 колонок.
Постоянно отдается ошибка спустя 5-10 минут после начала записи:

PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 85 bytes)

Как видно ниже, я выбираю по 1000 записей, и через LIMIT OFFSET записываю типо так: "LIMIT $i, 1000". То есть отработала 1000 - идет следующая 1000.
do {
            $i += 1000;
            $sql = "SQL запрос........ LIMIT $i, 1000";
            $stmt = $this->prepare($sql);
            $stmt->execute();
            $result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
            foreach($result as $url) {
                $sheet->setCellValue("колонка", "значение"); // и так в 8 колонок
                $row++;
            }
        } while ($result);


В cacheSettings ставил разные значения memoryCacheSize, всё равно беда.
$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
        $cacheSettings = array( 'memoryCacheSize ' => '512MB');
        PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");


И да, в php_ini увеличивать память не вариант. Кто то подскажет, что я не так делаю? И как правильно будет
  • Вопрос задан
  • 931 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
@micronull
Есть отличная библиотека: https://github.com/box/spout
u6oWi.png
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
mashletov
@mashletov
Math.random()
Забудь про PHPExcel для больших объемов. Ничего не сделаешь. Используй Spoutbox, например.
Он не тратит память, но возможности урезанные.
Ответ написан
Комментировать
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
В скрипте прям написать
ini_set("memory_limit","256M");
тоже не получается?
Ответ написан
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Пишите в csv, а затем конвертируйте чем-нибудь нативным в стиле
https://ask.libreoffice.org/en/question/2641/conve...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы