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


Posted in PHP onJuly 24, 2017

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以内的文件进行过测试,运行通畅,对于更大的文件未做测试,请斟酌使用或加以改进。

这篇PHP读取CSV大文件导入数据库的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php数据库连接
Oct 09 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 PHP
php中数字0和空值的区别分析
Jun 05 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
PHP实现更改hosts文件的方法示例
Aug 08 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
Yii2.0多文件上传实例说明
Jul 24 #PHP
thinkphp分页集成实例
Jul 24 #PHP
PHP 实现页面静态化的几种方法
Jul 23 #PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 #PHP
php魔法函数与魔法常量使用介绍
Jul 23 #PHP
php curl上传、下载、https登陆实现代码
Jul 23 #PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 #PHP
You might like
PHP数据库操作三:redis用法分析
2017/08/16 PHP
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
vue使用过滤器格式化日期
2021/01/20 Vue.js
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
python获取标准北京时间的方法
2015/03/24 Python
Python实现基本线性数据结构
2016/08/22 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
python装饰器使用实例详解
2019/12/14 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
flask项目集成swagger的方法
2020/12/09 Python
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
致100米运动员广播稿
2014/02/14 职场文书
《海上日出》教学反思
2016/02/23 职场文书
Mysql 设置boolean类型的操作
2021/06/04 MySQL