💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
**简介** 但我们使用PHP框架进行项目开发的时候,难免会遇到一些数据导入的需求,比如后台导入用户,导入订单数据等等,通常解决方案都是compose引入excel插件,先将文件上传到服务器,将文件中的数据读取到内存中,再插入数据表中。 **excel插件导入实现** 1、我们以laravel5.5框架为例 a、首先在更目录下安装excel插件: ``` composer require “maatwebsite/excel:~2.1.0” ``` b、在config/app.php中注册服务提供者到provides数组: ``` Maatwebsite\Excel\ExcelServiceProvider::class ``` c、在config/app.php中注册到aliases数组: ``` ‘Excel’ => Maatwebsite\Excel\Facades\Excel::class, ``` d、生成Laravel excel的配置文件: ``` php artisan vendor:publish --provider=“Maatwebsite\Excel\ExcelServiceProvider” ``` e、控制器代码实现 ``` public function import(Request $req){ try { //获取上传的excel文件 $filePath = $req->get('report'); Excel::load($filePath, function($reader) { $data = $reader->all(); //批量存储 //返回导入结果 throw new Exception("成功导入了".$count."条数据"); }); }catch(Exception $e){ return $this->doFailure($e); } } ``` **存在的问题** 当excel表格的数据量过大时,会很消耗内存,有可能导致内存溢,因而当导入数据量比较大的数据时可用以下方案: **mysql load data infile** a、首先同样要把需要导入的文件上传至服务器,而且文件格式最好是csv,TXT,.sql的格式 b、通过shell脚本发方式执行登录数据库以及导入操作 ``` #!/bin/bash #!/bin/bash mysql -uroot -p123456 <<EOF use test; load data local infile '/www/import.csv' into table device fields terminated by',' lines terminated by'\n' ignore 1 lines (@col1) set deviceName=@col1; EOF #忽略首列,设置字段对应列 ``` c、这时只需在controller中待文件上传完成通过php的system函数执行以上脚本即可 ``` system("cd /脚本位置 && sh ./import.sh",$result); ``` ## 总结 ``` 可以说mysql load data infile 是秒级响应,而当你用excel插件去导入的时候,发现会等待一段时间,所以看具体需求,如果需要导入的数据量足够大的话可以考虑使用第二种方式进行,当数据量不大时可以使用excel,要注意的是xlxs的格式需要转化成csv的格式。 ```