PHPExcel 给了我*允许的 134MB ...尝试了 16MB,允许的内存大小耗尽*即使是 2MB excel
PHPExcel gives me *Allowed 134MB ... Tried 16MB, Allowed memory size exhausted* even on 2MB excel
这是我的代码,当我上传超过 500kb 的 100MB 文件时 php_max_memory 允许的内存大小耗尽
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;
}
您可能需要分析您的脚本,因为 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;
}
这是我的代码,当我上传超过 500kb 的 100MB 文件时 php_max_memory 允许的内存大小耗尽
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;
}
您可能需要分析您的脚本,因为 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;
}