При скачивании большого excel документа не все записи помещаются

На сайте есть экспорт заказов. Заметил что при большом объеме данных (более 152 000 записей) excel-документ начинает обрезать последние записи. То-есть они не попадают в файл. С чем это может быть связано?

Привожу пример кода:

class Csv {

public function download_send_headers($filename) {
    // disable caching
    $now = gmdate("D, d M Y H:i:s");
    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
    header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
    header("Last-Modified: {$now} GMT");

    // force download
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-type: text/csv");

    // disposition / encoding on response body
    header("Content-Disposition: attachment;filename={$filename}");
    header("Content-Transfer-Encoding: binary");
}

public function array2csv(array &$array, $titles = null) {
    ob_start();
    $df = fopen("php://output", 'w');
    fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF));
    if(!is_null($titles)) fputcsv($df, $titles, ";");
    foreach ($array as $row) {
        fputcsv($df, $row, ";");
    }
    fclose($df);
    return ob_get_clean();
}
}

Система проходим по выборке записей из БД (без буфера) и передает массив из 10 записей в класс выше, после чего выводит результат:

...
$this->csv->download_send_headers("data_export_" . date("Y-m-d") . ".csv");
while(...){
    echo $this->csv->array2csv($rows);
}
die();

Это ограничения самого Excel-файла? Или какое-то другое ограничение?


Ответы (1 шт):

Автор решения: Rebellion

Проблема разрешилась увеличением параметра memory_limit в php.ini. Сам движок использовал всю доступную память сервера.

→ Ссылка