我在循环中使用以下方法以便以块的形式读取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);
上每次迭代时内存使用量的增加,但是在下一次迭代之前内存不会被再次清除。
我真的很难确定这里发生了什么。非常感谢任何帮助。
答案 0 :(得分:0)
PHPExcel库存在内存泄漏的大问题,因此我建议您切换到使用.xlsx文件的其他库。
查看问题的this答案"替代PHP_excel"。您可以使用PHP_XLSXWriter或Spout。
如果您无法切换到另一个库,则可以使用PHPExcel的缓存机制。 This回答可以帮助您。