• 技术文章 >后端开发 >php教程

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

    2016-05-17 08:46:10原创533
    对于数百万条数据量的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以内的文件进行过测试,运行通畅,对于更大的文件未做测试,请斟酌使用或加以改进。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP图片等比缩放类SimpleImage使用方法和使用实例分享_php实例 下一篇:php实现数组筛选奇数和偶数示例_php实例
    PHP编程就业班

    相关文章推荐

    • 怎么解决PHP高并发(商品秒杀)问题?两种解决方案分享• 正则放到在线测试用具里是可以的,但是放到文件里echo数组却是不行 • 咨询学习语方向面的有关问题 • php获取现阶段url路径的函数 • dedecms 图片(地图)链接有关问题

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网