Как бороться с утечкой памяти при экспорте данных в Yii2?
Делаю экспорт в CSV относительно dataProvider. Но получается, что в какой-то момент на сложной view (более 10 join) падает с ошибкой о нехватке памяти PDO.
Код:
private function writeContentRowsQuery() {
$offset = 0;
while ($queryResult = $this->dataProvider->query->limit($this->_settings['limit'])->offset($offset)->createCommand()->queryAll()) {
foreach ($queryResult as $row) {
$rowData = [];
foreach ($this->_visibleColumns as $visibleColumn) {
$rowData[] = $this->getDataCellQueryValue($visibleColumn, $row);
}
fputcsv($this->_csv, $rowData, ';');
ob_flush();
flush();
unset($rowData);
gc_collect_cycles();
}
$offset += $this->_settings['limit'];
unset($queryResult);
gc_collect_cycles();
}
gc_collect_cycles();
}
Здесь идет инициализация процесса так:
ob_start();
$this->_csv = fopen('php://output', 'wb');
if (!empty($this->contentBefore)) {
$this->writeBeforeContentRows();
}
$this->writeColumnHeaders();
$this->writeContentRowsQuery();
fclose($this->_csv);
Что делать в таком случае?
Ошибки: PDOException: SQLSTATE[54000]: Program limit exceeded: 7 ОШИБКА: нехватка памяти DETAIL: Не удалось увеличить строковый буфер
Орет на строки:
ob_flush();о том, что Headers already sentwhile ($queryResult = $this->dataProvider->query->limit($this->_settings['limit'])->offset($offset)->createCommand()->queryAll())о нехватке памяти