PHP导出csv,两种方法 & 导出 XML

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

    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]);
    }

导出XML,thinkphp5.0数据库查询结果,直接导出XML

public function exportToXML($arr,$table){
        //1、声明xml
        $_doc=new \DOMDocument('1.0', 'utf-8');

        //2、排版格式
        $_doc->formatOutput=true;
        $table = $_doc->createElement($table);
        foreach ($arr as $key => $val){
            //创建一个主标签
            $obj = $_doc->createElement('row');
            foreach ($val as $kv => $v){
                //将值放入version标签里
                $tag = $_doc->createElement($kv);
                //将一级标签写入root里
                $htm = $_doc->createTextNode($v);
                $tag->appendChild($htm);
                $obj->appendChild($tag);
            }
            $table->appendChild($obj);
        }

        //将主标签写入xml
        $_doc->appendChild($table);

        //创建文件夹
        $path = ROOT_PATH . 'public/backup/' . date('Ymd') .'/';
        if (!file_exists($path)){
            mkdir ($path,0777,true);
        }

        //生成xml
        $_doc->save($path . 'Table_1.xml');
    }

测试:

 $res = db('table')->select();

 $this->exportToXML($res,'table');

 

你可能感兴趣的:(php,ThinkPHP3.2,其他)