Я использую обработку на стороне сервера DataTables для таблиц на моем веб-сайте отчетов. Я также использую PHPExcel для экспорта отчетов в Excel. Мои php-скрипты для создания таблиц для просмотра в браузере работают нормально, но когда я пытаюсь заставить работать скрипт PHPExcel, я получаю сообщение об ошибке нехватки памяти, например:
Я вижу, что он выдает ошибку в том же месте, что и был, и с той же ошибкой, что и при попытке обработки отчетов на стороне клиента. Вот почему я пытаюсь сделать это на сервере. Я искал вокруг, но я ничего не видел о такой ситуации.
Любые идеи, что я могу попробовать?
ИЗМЕНИТЬ
Когда я увеличиваю память до 512, я получаю ту же ошибку, но в другом месте:
ИЗМЕНИТЬ 2
Это не повторение вопроса, упомянутого ниже. Я знаю, что у моего сервера есть необходимая память, он использует ее при представлении данных в браузере. Эта проблема возникает только тогда, когда я отправляю те же данные в файлы PHPExcel. Было упомянуто попробовать что-то с кэшированием ячеек, но я не знаю, что это такое в отношении PHPExcel. Это первый раз, когда я попытался использовать его. Я даже пытался уменьшить количество отправляемых строк до 11 вместо 12 000+, но все равно получаю сообщение об ошибке.
ОБНОВЛЕНИЕ
Я думаю, что я знаю, в чем проблема теперь после долгих испытаний.
Первоначальная отрисовка для заполнения экрана браузера оттягивает только то, что нужно для экрана, начинается с 25 и заканчивается 150. Когда я пытаюсь экспортировать, он пытается вытащить все это. самый большой отчет, который у меня есть в настоящее время, составляет 65000+ строк и 35 столбцов, хотя у меня есть и более крупные отчеты, которые скоро появятся. Я обновил предел памяти до ini_set('memory_limit', '-1');
, чтобы он мог использовать все, что ему нужно, и он это делает.
Теперь время истекает через 300 секунд (5 минут). Я попытался исправить это с помощью ini_set('MAX_EXECUTION_TIME', 10);
, но, похоже, это ничего не дает (вероятно, я неправильно настроил его, я проведу больше исследований по этому вопросу).
Теперь мне нужно найти, какой метод кэширования библиотеки PHPExcel будет наиболее эффективным. В настоящее время я использую cache_in_memory_gzip
, но я также тестирую другие, когда читал о них, и они кажутся, возможно, лучше. Я сделаю еще одно обновление или отвечу на вопрос, когда закончу тестирование.