PHP导出csv,两种方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a114469/article/details/88797363

生存文件,指定保存目录。

    function exportToCsv($fileName = '', $headArr = [], $data = []){
        //文件夹
        $filedir = ROOT_PATH."public/csv/";
        if(!is_dir($filedir)) mkdir($filedir,777,true);
        //路径
        $fileName .= '.csv';
        $filePath = $filedir.$fileName;

        //生成csv文件
        $fp    = fopen($filePath, 'w');

        $header = implode(',', $headArr) . PHP_EOL;
        $content = '';
        foreach($data as $line => $val)
        {
            $content .= implode(',', $val) . PHP_EOL;
        }
        $csv = $header.$content;
        // 写入数据
        fwrite($fp,$csv);
        //关闭文件句柄
        fclose($fp);
        return;
    }

header文件头


    #生成一个csv,header不能重写
    function exportToExcel($fileName = '', $headArr = [], $data = []){
        ini_set('memory_limit','1024M'); //设置程序运行的内存
        ini_set('max_execution_time',0); //设置程序的执行时间,0为无上限
        @ob_end_clean();  //清除内存
        ob_start();
        @header("Content-Type: text/csv");
        @header("Content-Disposition:filename=".$fileName.'.csv');
        $fp=fopen('php://output','w');
        fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));
        fputcsv($fp,$headArr);
        $index = 0;
        foreach ($data as $item) {
            if($index==1000){ //每次写入1000条数据清除内存
                $index=0;
                ob_flush();//清除内存
                flush();
            }
            $index++;
            fputcsv($fp,$item);
        }

        @ob_flush();
        flush();
        ob_end_clean();
        return;
    }

测试:

    $count = db('table')->count();
    //csv文件数
    $page       = ceil($count/1);//1每个文件1条(测试)
    $page_arr   = range(1,$page);
    
    foreach ($page_arr as $kkk => $vvv) {
        $rs[$kkk]    = db('table')->field('l1,l2')->page($vvv.', 1000')->select();
        $title[$kkk] = ['列1','列2'];
        $exl         = [];
        foreach ($rs[$kkk] as $k => $v){
            if (!$v['l1']) $v['l1'] = '暂无数据';
            if (!$v['l2']) $v['l2'] = '暂无数据';
            $exl[$kkk][] = array(
                $v['l1'],$v['l2']
            );
        }
        //$this->exportToExcel('table_'.time().$kkk,$title[$kkk],$exl[$kkk]);
        $this->exportToCsv('table_'.time().$kkk,$title[$kkk],$exl[$kkk]);
    }

猜你喜欢

转载自blog.csdn.net/a114469/article/details/88797363