用php导入10W条+ 级别的csv大文件数据到mysql。导出10W+级别数据到csv文件

前言:

如题。我们这里说的是csv文件的行数达到10W以上。这个是一个难点。


1. 说说csv 和 Excel 

这两者都是我们平时导出或者导入数据一般用到的载体。两者有什么区别呢?csv 格式更兼容一点。那么共同点都是GBK格式的,非UTF8。所以我们上传文件的时候,老是出现乱码,就是编码问题没有转好导致。

2. 推荐的几种方法

1. 函数 fgetss($handel) ;  返回字符串。它就是 strip_tags(fget($handel)) 的组合读取csv 文件的一行。去掉了其中的HTML,php 等标签。这种方法使用于小的csv 文件
$handle=fopen("1.csv","r");
while(!feof($handle)){
    $buffer=fgetss($handle,2048);
    $row = mb_convert_encoding(trim($buffer), 'utf-8', 'gbk'); //很重要。转换成UTF8格式,不然容易产生乱码
    $data=explode(",",$row); //转换成数组
    $insertRows[]    = $data;
} //这样所有的csv文件就生成一个二维数组$insertRows;

2. 函数 fgetcsv($handel,2048,','), 返回数组,它就是 explode(",",fget($handel)) 的组合。这种方法使用于小的csv 文件。而且不适合有汉字的csv 文件。
$handle=fopen("1.csv","r");
while($data=fgetcsv($handle,1000,",")){
   $insertRows[]    = $data;
}  //这样所有的csv文件就生成一个二维数组$insertRows;

3. 说到正题了。上面2种方法适合少量的csv 文件。如果一个文件有10W+ 以上的行数,恐怕就很悲剧了。
$handle=fopen("1.csv","r");
    
//将文件一次性全部读出来
$excelData = array();
$content = trim(file_get_contents($fileName));
$excelData = explode("\n",$content);

或者直接用$excelData = file($file);   file() 函数直接将数据读出并放入数组当中。

我们先将所有的文件一次性读出来。放到一个数
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值