PHP导入(百万级)Excel表格数据

简介

但我们使用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);

d、这时可查看数据是否导入成功

总结

可以说mysql load data infile  是秒级响应,而当你用excel插件去导入的时候,发现会等待一段时间,所以看具体需求,如果需要导入的数据量足够大的话可以考虑使用第二种方式进行,当数据量不大时可以使用excel,要注意的是xlxs的格式需要转化成csv的格式。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值