Превышена память при записи файла Excel с использованием PHPExcel - PullRequest
0 голосов
/ 22 октября 2018

Мой VPS имеет 8 ГБ памяти

Когда я пытаюсь написать 4000 строк и 62 столбца.1 столбец содержит изображение (PHPExcel_Worksheet_MemoryDrawing)

После записи некоторых данных ОС имеет фоновый скрипт уничтожения, потому что VPS не имеет больше памяти.

Я использую PHPExcel версии 1.7.8

Я записываю файл Excel в каждом цикле.

Образец кода для записи изображения

$gdImage = imagecreatefromstring(file_get_contents($proof_photo_1));
if ($gdImage) {
    $objDrawing = new PHPExcel_Worksheet_MemoryDrawing();
    $objDrawing->setImageResource($gdImage);
    $objDrawing->setCoordinates("BA" . $i);
    $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
    $objDrawing->setHeight(150);
    $width = $objDrawing->getWidth() * 0.143;
    $height = $objDrawing->getHeight() * 0.75;
    if ($rowDim->getRowHeight() < $height) {
        $rowDim->setRowHeight($height);
    }
    $colDimSh = $objPHPExcel->getActiveSheet()->getColumnDimension("BA");
    $colDimSh->setAutoSize(false);
    $colDim = $objPHPExcel->getActiveSheet()->getColumnDimension("BA");
    if ($colDim->getWidth() < $width) {
        $colDim->setWidth($width);
    }
    unset($objDrawing);
} else {
    $objPHPExcel->getActiveSheet()->SetCellValue("BA" . $i, "-");
}

Я пробовал много вещей для экономии памяти

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize' => '100MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod,$cacheSettings);

В каждой сторонеloop

if($i % 100 == 0){
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save($csvPath);
    $objPHPExcel->disconnectWorksheets();
    unset($objWriter);
    unset($objPHPExcel);
    chmod($csvPath, 0777);

    $objPHPExcel = PHPExcel_IOFactory::load($csvPath);
    $objPHPExcel->setActiveSheetIndex(0);
}

Выше приведено много времени для записи файла Excel и иногда сброса файла с начального уровня.

...