项目场景: 记录一下使用thinkPHP开发excel导入功能时碰到的一个小BUG 问题描述 Fatal error: Allowed memory size of 1073741824 bytes
记录一下使用thinkPHP开发excel导入功能时碰到的一个小BUG
Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 83886080 bytes) in /www/server/test/vendor/phpoffice/phpexcel/Classes/PHPExcel/CachedObjectStorage/Memory.php on line 49
先看代码:
需要引入phpoffice/phpexcel
composer require phpoffice/phpexcel
public class ExcelImportController{public function excelImportTest(){ini_set('max_execution_time', 600);//600s ini_set("memory_limit","1024M");//内存限制1024M $result = array('code'=>0, 'msg'=>'操作失败'); $file = request()->file('file'); $type = input('type'); $file_name = $file->getInfo()['name'];//文件名称 $file_extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); $file_path = 'uploads/files/'; $info = $file->move($file_path); if($info){ $new_path = $file_path.$info->getSaveName(); $objPHPExcel = new \PHPExcel(); //实例化PHPExcel类 if ($file_extension == 'xlsx'){ $objReader=new \PHPExcel_Reader_Excel2007(); } else if ($file_extension == 'xls') { $objReader = new \PHPExcel_Writer_Excel5($objPHPExcel); } else{ $objReader = new \PHPExcel_Writer_Excel5($objPHPExcel); } $objPHPExcel = $objReader->load($new_path,'utf-8'); $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); //取得总行数 for($i=2;$i<=$highestRow;$i++) { $data[$a]['name'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue(); if($data[$a]['name'] == ''){ break; } $data[$a]['avatar'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue(); $data[$a]['nickname'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue(); $gender = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue(); $data[$a]['gender'] = $gender == '男'?1:0; $a++; } //insertAll if(!empty($data)){ $res = (new TestModel())->insertAll($data); if($res){ $result['importCount'] = $a; } }else{ $result['importCount'] = 0; } $result['code'] = 1; $result['msg'] = 'success'; return JSON_encode($result); }else{ return json_encode($result); }}}
报错提示说是内存超过设定值,刚开始我以为是我传的文件太大了,后面我删掉了excel的所有数据,只留了一行,结果依然报错。
但是同事用这个接口测试一点问题没有,可以正常导入数据,然后我就把他的excel拿过来了试了一下,果然正常了,至此,真相大白,是我的excel文件有问题。
然后我对比了一下两个的文件,我的文件里其中一列用到了一个wps的数据->下拉列表的功能,导致内存溢出,把这个下拉列表功能移除就可以正常上传了。
来源地址:https://blog.csdn.net/qq_35220984/article/details/126959166
--结束END--
本文标题: thinkphp导入excel遇到Fatal error: Allowed memory size of 1073741824 bytes exhausted
本文链接: https://www.lsjlt.com/news/387760.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0