慕容的工作随笔

慕容的工作随笔

记录学习和工作

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

导出数据 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();
    }
}</code></pre>

CSV 导出说明

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

为什么不用 Excel 导出?

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

评论 (0)

还没有评论,来做第一个吧。

发表评论

提交后需管理员审核通过后显示