本文主要是介绍phpspreadsheet读取大批量数据时内存溢出解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
需求:一次性读取几万条excel数据并保存到数据库中
问题:当excel超过五万条时内存溢出,程序直接停止
解决办法:将表格切割成多个csv文件,每次只读取一部分数据,大大缓解服务器内存压力,缺点是处理时间会变长,适用于对时间要求不是很高的场景。
建议:小于两万五千条时phpspreadsheet直接读取,大于时采取分割法,下边只附分割法的代码
/*** 预读过滤类* @author wangyelou* @date 2018-07-30*/
class MyAheadreadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
{public $record = array();private $lastRow = '';public function readCell($column, $row, $worksheetName = ''){if (isset($this->record[$worksheetName]) ) {if ($this->lastRow != $row) {$this->record[$worksheetName] ++;$this->lastRow = $row;}} else {$this->record[$worksheetName] = 1;$this->lastRow = $row;}return false;}
}/*** 解析过滤类* @author wangyelou* @date 2018-07-30*/
class MyreadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
{public $startRow;public $endRow;public $worksheetName;public function readCell($column, $row, $worksheetName = ''){if ($worksheetName == $this->worksheetName && $row >= ($this->startRow+1) && $row <= ($this->endRo
这篇关于phpspreadsheet读取大批量数据时内存溢出解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!