php导出超大csv导出方法

基本思路就是,知道总数之后分割成2万一个数组进行查询,最后独立写入csv,避免数据过大导致溢出

速度还不错,在php7下,机器I5 8G内存,128G,SSD,52W多条,大概也就10几秒,出来整个文件38.2M

laravel 写的demo  2018年6月19日18:13:26

  set_time_limit(0);
        ini_set('memory_limit', '512M');
        //获取总数
        $count = DataChinaYearData::count();
        //526672
        $per = 20000;

        $section = array();
        for ($i = 0; $i <= $count; $i += $per) {
            $section[] = $i;
        }
        if (end($section) < $count) {
            $section[] = $count;
        }
        //清理输出流的防止乱码
        ob_flush();
        flush();
        $fp = fopen('file.csv', 'w');

        foreach ($section as $k => $v) {
            $list = array();
            $list = DataChinaYearData::offset($v)->limit($per)->get()->toArray();
            foreach ($list as $fields) {
                fputcsv($fp, $fields);
            }
            unset($list); //防止溢出
            ob_flush();
            flush();
        }
        fclose($fp);

猜你喜欢

转载自www.cnblogs.com/zx-admin/p/9199674.html