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文件及问题总结
最近做了一个项目需要把订单的信息显示出来,并且能够把相关信息放到一个.csv 文件中,下载到浏览器.虽然说csv是一种比较简单的excel表格形式,生成只要按指定格式然后生成.csv文件就可以,但是在使用中也会遇到很多问题,下面给大家分享下PHP下载csv文件及问题总结 首先大家先看个例子,生成csv文件并下载 //要生成csv文件的数组 $csvArr=array(); $csvArr[]=array('用户编号1','上班日期1','签到时间1','签退时间1'); $csvArr[]=ar
-
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
命令: fputcsv() 命令格式:int fputcsv ( resource handle [, array fields [, string delimiter [, string enclosure]]] ) 命令解析:fputcsv() 将一行(用 fields数组传递)格式化为 CSV 格式并写入由 handle指定的文件.返回写入字符串的长度,出错则返回 FALSE. 可选的 delimiter参数设定字段分界符(只允许一个字符).默认为逗号:,. 可选的 enclosure参数
-
php使用fgetcsv读取csv文件出现乱码的解决方法
本文实例讲述了php使用fgetcsv读取csv文件出现乱码的解决方法.分享给大家供大家参考.具体分析如下: 一般来说在php中碰到乱码多半是编码问题,在这里我们实例分析了fgetcsv读取csv文件乱码原因所在与解决方法. 例子如下: 复制代码 代码如下: function get_csv_contents( $file_target ){ $handle = fopen( $file_target, 'r'); while ($data = fgetcsv($handle, 1000,
-
详解PHP导入导出CSV文件
我们先准备mysql数据表,假设项目中有一张记录学生信息的表student,并有id,name,sex,age分别记录学生的姓名.性别.年龄等信息. 复制代码 代码如下: CREATE TABLE `student` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT NULL, `sex` varchar(10) NOT NULL, `age` smallint(3) NO
-
php写入数据到CSV文件的方法
本文实例讲述了php写入数据到CSV文件的方法.分享给大家供大家参考.具体实现方法如下: <?php $row = 0; ini_set('max_execution_time', 300); $cate;$item;$value;$us; $fp = fopen("torah1.csv", "w"); if (($handle = fopen("t.csv", "r")) !== FALSE) { while (($d
-
php导入csv文件碰到乱码问题的解决方法
今天主要是想写一个php导入csv文件的方法,其实网上一搜一大把.都是可以实现怎么去导入的.但是我导入的时候遇到了两个问题,一个是在windows上写代码的时候测试发生了乱码问题,然后解决了.第二个是提交到linux系统上的时候又发生了乱码.我开始还不清楚是乱码的原因,一开始我还以为是代码svn提交发生的错误,到最后我在我的一个群里提问了一下,一朋友是做phpcms的,他说他遇到从Windows提交到Linux的时候刚开始也总是发生错误,后来排查原因就是乱码导致成的.下面切入正题看怎么解决两个问
-
php中数据的批量导入(csv文件)
有时写程序时后台要求把大量数据导入数据库中,比如计算机考试成绩的查询.电话簿的数据等一般都是存放在excel中的,这时我们可把数据导出成csv文件,然后通过以下程序即可在后台批量导入数据到数据库中. 下面只是主要程序部分: <?php /***************************************************作者:冲星/arcow**************************njj@nuc.edu.cn*****************************
-
php将csv文件导入到mysql数据库的方法
本文实例讲述了php将csv文件导入到mysql数据库的方法.分享给大家供大家参考.具体分析如下: 本程序实现数据导入原理是先把csv文件上传到服务器,然后再通过php的fopen与fgetcsv文件把数据保存到数组,然后再用while把数据一条条插入到mysql数据库,代码如下: 复制代码 代码如下: <?php $fname = $_files['myfile']['name']; $do = copy($_files['myfile']['tmp_name'],$fname); if ($
-
基于PHP读取csv文件内容的详解
一次性读取csv文件内所有行的数据 复制代码 代码如下: <?php $file = fopen('windows_2011_s.csv','r'); while ($data = fgetcsv($file)) { //每次读取CSV里面的一行内容//print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可$goods_list[] = $data; }//print_r($goods_list);/* foreach ($goods_list as $arr){
-
PHP实现CSV文件的导入和导出类
本文实例讲述了PHP实现CSV文件的导入和导出类.分享给大家供大家参考.具体如下: <?php /** * CSV 文件处理类 */ class Csv{ public $csv_array; //csv数组数据 public $csv_str; //csv文件数据 public function __construct($param_arr, $column){ $this->csv_array = $param_arr; $this->path = $path; $this->
-
php对csv文件的读取,写入,输出下载操作详解
复制代码 代码如下: <?php $file = fopen('text.csv','r'); while ($data = fgetcsv($file)) { //每次读取CSV里面的一行内容 //print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可 $goods_list[] = $data; }//print_r($goods_list);echo $goods_list[0][1]; fclose($file);
-
php实现的读取CSV文件函数示例
本文实例讲述了php实现的读取CSV文件函数.分享给大家供大家参考,具体如下: function read_csv($cvs) { $shuang = false; $str = file_get_contents($cvs); for ($i=0;$i<strlen($str);$i++) { if($str{$i}=='"') { if($shuang) { if($str{$i+1}=='"') { $str{$i} = '*'; $str{$i+1} = '*'; } e
随机推荐
- 更改SQL Server 2005数据库中tempdb位置的方法
- SQL Server远程定时备份数据库脚本分享
- DOM操作和jQuery实现选项移动操作的简单实例
- JS实现无缝循环marquee滚动效果
- js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
- phpstrom使用xdebug配置方法
- 基于jquery DOM写的类似微博发布的效果
- 如何让搜索引擎抓取AJAX内容解决方案
- python利用正则表达式提取字符串
- Bootstrap按钮组简单实现代码
- 使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
- C#中单例模式的三种写法示例
- 张剑光 的大学四年,留给学弟学妹 转载
- MySQL5.7.14下载安装图文教程及MySQL数据库语句入门大全
- 基于jquery的大众点评,分类导航实现代码
- 命令提示符编译java的方法(必看篇)
- Java语言实现简单FTP软件 FTP软件效果图预览之下载功能(2)
- 简述:我为什么选择Python而不是Matlab和R语言
- Java编程常见内存溢出异常与代码示例
- Nginx反向代理与负载均衡实战篇