【原创】大数据量表格数据导出

导出数据 demo

以导出 100 万条数据为例:

 public function export()
    {
        //让程序一直运行
        set_time_limit(0);
        //设置程序运行内存
        ini_set('memory_limit', '128M');

        $fileName = '测试导出数据';
        header('Content-Encoding: UTF-8');
        header("Content-type:application/vnd.ms-excel;charset=UTF-8");
        header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');

        //打开php标准输出流
        $fp = fopen('php://output', 'a');

        //添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。
        fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));
        //添加导出标题
        fputcsv($fp, ['ID', 'VALUE']);

        $step = 100; //循环次数
        $nums = 10000; //每次导出数量

        for ($i = 0; $i < $step; $i++) {
            $start = $i * $nums;

            $result = $this->table('m_test')
                ->offset($start)
                ->limit($nums)
                ->get();

            foreach ($result as $item) {
                fputcsv($fp, [$item->id,$item->value]);
            }
            //每1万条数据就刷新缓冲区
            ob_flush();
            flush();
        }
    }

CSV 导出说明

CSV 格式文件最大行数是没有上限的,在国外科学数据网站下载的 CSV 文件有几十 G上百 G,行数多大几十亿上百亿行;但是大文件 CSV 打开编辑的软件就基本没有,Excel、WPS、OpenOffice 仅支持打开编辑前面 1048576 行;Snapde 软件支持的行数多一些,一次可以打开编辑一两千万行的 CSV 数据,速度很快。

为什么不用 Excel 导出?

fputcsv() 要比PHPExcel好很多;因为 CSV 文件较小,CSV 文件数据可存放数量可大可小,CSV 生成不占用大量 CPU 和时间,而 Excel 的生成时间随着文件数据量的增加成而所需时间越多。

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注