找不到修复PHPExcel内存泄漏的方法

时间:2014-07-30 09:32:05

标签: php memory-leaks phpexcel

我在循环中使用以下方法以便以块的形式读取excel文件(使用自定义读取过滤器以便我不会耗尽内存):

public function chunkToArray($file, $startRow, $chunkSize)
{

    $file = __DIR__ . '/../../' . $file;

    $objReader = PHPExcel_IOFactory::createReader('Excel2007');

    $chunkFilter = new ExcelChunkReadFilter();

    $objReader->setReadFilter($chunkFilter);
    $chunkFilter->setRows($startRow, $chunkSize);

    $objPHPExcel = $objReader->load($file);

    $array = $objPHPExcel->getActiveSheet()->rangeToArray('A' . $startRow . ':AT' . ($startRow + $chunkSize - 1));

    $objPHPExcel->disconnectWorksheets();

    unset($objPHPExcel);
    $objPHPExcel = null;

    return $array;
}

尽管调用了“disconnectWorksheets”并取消设置并取消了php excel对象,但我仍然在每次循环迭代时都会出现内存泄漏。

我已经使用echo memory_get_usage(true)来隔离行$objPHPExcel = $objReader->load($file);上每次迭代时内存使用量的增加,但是在下一次迭代之前内存不会被再次清除。

我真的很难确定这里发生了什么。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

PHPExcel库存在内存泄漏的大问题,因此我建议您切换到使用.xlsx文件的其他库。

查看问题的this答案"替代PHP_excel"。您可以使用PHP_XLSXWriterSpout

如果您无法切换到另一个库,则可以使用PHPExcel的缓存机制。 This回答可以帮助您。