PHP按行读取、处理较大CSV文件的代码实例


Posted in PHP onApril 09, 2014

对于数百万条数据量的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 相关文章推荐
PHP 的几个配置文件函数
Dec 21 PHP
PHP中设置时区方法小结
Jun 03 PHP
PHP页面间参数传递的四种方法详解
Jun 09 PHP
简单实用的.net DataTable导出Execl
Oct 28 PHP
php实现下载限制速度示例分享
Feb 13 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
基于PHP实现简单的随机抽奖小程序
Jan 05 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 PHP
PHP设计模式概论【概念、分类、原则等】
May 01 PHP
浅谈php常用的7大框架的优缺点
Jul 20 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 #PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 #PHP
PHP扩展模块Pecl、Pear以及Perl的区别
Apr 09 #PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 #PHP
PHP读取大文件的类SplFileObject使用介绍
Apr 09 #PHP
php解决约瑟夫环示例
Apr 09 #PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 #PHP
You might like
编写自己的php扩展函数
2006/10/09 PHP
ASP和PHP都是可以删除自身的
2007/04/09 PHP
介绍php设计模式中的工厂模式
2008/06/12 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
深入理解vue Render函数
2017/07/19 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
基于jquery的on和click的区别详解
2018/01/15 jQuery
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
在Python中使用模块的教程
2015/04/27 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
python url 参数修改方法
2018/12/26 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
基于python plotly交互式图表大全
2019/12/07 Python
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
洗煤厂厂长岗位职责
2014/01/03 职场文书
老公保证书范文
2014/04/29 职场文书
班级课外活动总结
2014/07/09 职场文书
风之谷观后感
2015/06/11 职场文书
一文解答什么是MySQL的回表
2022/08/05 MySQL