文档章节

PHP读取CSV大文件导入数据库

学习环境
 学习环境
发布于 2015/09/21 12:58
字数 296
阅读 553
收藏 3

PHP如何对CSV大文件进行读取并导入数据库?

对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象。

为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的。

下面这个函数是读取CSV文件中指定的某几行数据:

/**  * csv_get_lines 读取CSV文件中的某几行数据  * @param $csvfile csv文件路径  * @param $lines 读取行数  * @param $offset 起始行数  * @return array  * */ function csv_get_lines($csvfile, $lines, $offset = 0) { if(!$fp = fopen($csvfile, 'r')) { return false; } $i = $j = 0; while (false !== ($line = fgets($fp))) { if($i++ < $offset) { continue; } break; } $data = array(); while(($j++ < $lines) && !feof($fp)) { $data[] = fgetcsv($fp); } fclose($fp); return $data; }
调用方法:

 

$data = csv_get_lines('path/bigfile.csv', 10, 2000000);

print_r($data);

函数主要采用行定位的思路,通过跳过起始行数来实现文件指针定位。

至于数据如何入库本文不再详细讲述。

上述函数对500M以内的文件进行过测试,运行通畅,对于更大的文件未做测试,请斟酌使用或加以改进。

本文转载自:

学习环境
粉丝 3
博文 51
码字总数 115814
作品 0
长春
私信 提问
PHP读取创建txt,doc,xls,pdf类型文件

PHP读取或者创建txt,doc,xls,pdf各个类型文件的方法. php读取(文本.txt)文件: 一般是使用fopen、fgets的方法,例如: <?php $fp=fopen('文件名.txt','r'); for ($i=1;$i<100;$i++) fgets(......

durban
2012/03/31
1K
3
PHP导入Excel和导出数据为Excel文件

有时需要将Excel表格的数据导入到mysql数据库中,我们使用PHP的一个开源项目PHP-ExcelReader可以轻松实现Excel的导入。另外将mysql数据导出为Excel与本站上篇文章中导出CSV一样,只是将逗号分...

rin9958
2016/06/03
127
0
网站推广php读excel文件的方法

网站推广常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点。个人推荐用第三种方法,因为它可以跨平台使用。 1. 以.csv格式读取 将.xls转换成.csv的文本格式,然后再用PHP分析这个文...

网络营销
2012/02/20
69
0
python使用pandas读取csv文件批量导入同一张同一张表?

python使用pandas读取csv文件批量导入同一张同一张表? 手上有一种表,每张表字段都一样并且数据行一致,本人用pandas读取csv后得到的dataframe通过to_sql导入数据库中的表中,但由于每张表第...

Duriea
2018/11/20
437
0
用 PostgreSQL 的 COPY 导入导出 CSV

TL;DR 原文 来自我的博客。 无意中看到了一篇讲 数据批量导入 的文章,才注意到 PostgreSQL 的 命令。简而言之,它用来在文件和数据库之间复制数据,效率非常高,并且支持 CSV 。 导出 CSV ...

darkbaby123
2017/02/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Less导入选项

Less 提供了CSS @import CSS规则的几个扩展,以提供更多的灵活性来处理外部文件。 语法: @import (keyword) "filename"; 以下是导入指令的相关详情: reference,使用较少的文件但不输出。 ...

凌兮洛
4分钟前
3
0
Docker下实现MySQL主从(读、写分离)同步配置

docker下实现两个(或多个)mysql容器的主、从数据库同步配置,首先要明白docker容器的相互通信关系,默认是使用的bridge模式: 也就是说,通过docker run命令创建docker容器是每个容器都有自己...

源哥L
14分钟前
8
0
一起来学Java8(三)——方法引用

在一起来学Java8(一)——函数式编程中有一个简单的函数式编程的例子: import java.util.function.Consumer;class Person { public static void sayHello(String name) { S...

猿敲月下码
33分钟前
15
0
读书笔记:深入理解ES6(十一)

第十一章 Promise与异步编程   Promise可以实现其他语言中类似Future和Deferred一样的功能,是另一种异步编程的选择,它既可以像事件和回调函数一样指定稍后执行的代码,也可以明确指示代码...

张森ZS
57分钟前
23
0
面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
今天
30
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部