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

PHP导入excel数据

  • 简介
    • excel插件导入实现
    • 存在的问题
    • mysql load data infile
    • 总结

简介

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

c、这时只需在controller中待文件上传完成通过php的system函数执行以上脚本即可

 system("cd /脚本位置 && sh ./import.sh",$result);

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

总结

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

你可能感兴趣的:(php,mysql,php,shell)