这是我的代码,当我上传一个超过500kb的文件,在100MB内php_max_memory am得到允许的内存大小耗尽
public function runImport($file){
$errors = array();
$objPHPExcel = Config::getExcel($file);
foreach($objPHPExcel->getSheet(0)
->getRowIterator(2, $objPHPExcel->
getSheet(0)->
getHighestDataRow()) as $row ){
$i = 0;
$_data = array();
foreach($row->getCellIterator() as $cell ){
$i++;
if ($i > count($columns)) break;
array_push($_data,(string)$cell->getValue());
}
foreach ($_data as $item){
if ($item != null && $item != "" && strlen($item) > 0){
$jdata = new Jobsdata();
$jdata->jobId = $this->jobId;
$jdata->data = $_data;
$jdata->save();
break;
}
}
}
$this->save();
return $errors;
}
答案 0 :(得分:0)
您可能需要对脚本进行概要分析,因为PHPexcel在内存使用方面往往有点自由,但与此同时,如果您遇到困难,可以在循环中尝试使用gc_collect_cycles()进行垃圾回收,因为PHP在函数或脚本完成之前不会收集垃圾。它会减慢它,但它可能会完成。
public function runImport($file){
$errors = array();
$objPHPExcel = Config::getExcel($file);
foreach($objPHPExcel->getSheet(0)->getRowIterator(2, $objPHPExcel->getSheet(0)->getHighestDataRow()) as $row ){
$i = 0;
$_data = array();
foreach($row->getCellIterator() as $cell ){
$i++;
if ($i > count($columns)) break;
array_push($_data,(string)$cell->getValue());
gc_collect_cycles();
}
foreach ($_data as $item){
if ($item != null && $item != "" && strlen($item) > 0){
$jdata = new Jobsdata();
$jdata->jobId = $this->jobId;
$jdata->data = $_data;
$jdata->save();
break;
}
gc_collect_cycles();
}
gc_collect_cycles();
}
$this->save();
return $errors;
}