Я использую PHPExcel класс в php для экспорта данных из таблицы MySQL. Страница php просто записывает данные Excel в цикле, например:
$objPHPExcel = new PHPExcel();
# Query result goes to array $result
# ...
$i = 1;
for ($r = 0; $r < count($result); $r++) {
# Set $value1, $value2, $value3 from $result
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue("A$i", $value1)
->setCellValue("B$i", $value2)
->setCellValue("C$i", $value3);
$i++;
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("/path/to/exported_file.xlsx");
Этот код отлично работает, когда экспортируемый файл не очень большой. Мне удалось экспортировать около 10000 записей. Тем не менее, я получаю следующую ошибку, когда файл становится больше (из запроса возвращается больше записей).
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 71 bytes)
Я увеличил предел памяти в /etc/php5/apache2/php.ini
до 1024M. Даже после этого увеличения я все еще получаю эту ошибку.
Я попытался создать несколько файлов Excel вместо одного, ограничив результаты запроса, добавив LIMIT
к оператору SELECT
, но это также не решило проблему.
Есть идеи, как решить эту проблему?
Я использую php-5.2.4 и apache-2.2.8 на сервере Ubuntu, если это имеет значение.