CSV导出文件函数方法,csv导出大数据

作者:Liaodeity - 2015年09月01日

最近在导出文件的excel,发现数据太多的时候导不出来,可能是因为数据太大,消耗内存太多导致。

所有就换成了csv的导出方式,现在分享一个csv导出文件的函数方法给大家。

CSV导出函数

function exportexcel(){
    //防止数据大,导致页面无响应
    set_time_limit(0);
    ini_set('memory_limit','1024M');

    $data = array(
        0=>array('a'=>'测试a','b'=>'测试b','c'=>'测试c'),
        1=>array('a'=>'1测试a','b'=>'1测试b','c'=>'1测试c')
        );

    $outputFileName = 'export'.date('YmdHis',time()).rand(100,999).'.csv';
    header('Content-Type: application/vnd.ms-excel');  
    header('Content-Disposition: attachment;filename="'.$outputFileName.'"'); 
    header('Cache-Control: max-age=0');

    $fp = fopen('php://output', 'a');  

    // 输出Excel列名信息  
    $head = array("列1", "列2", "列3");   
    foreach ($head as $i => $v) {  
        // CSV的Excel支持GBK编码,一定要转换,否则乱码  
        $head[$i] = iconv('utf-8', 'gbk', $v);  
    }

    // 将数据通过fputcsv写到文件句柄  
    fputcsv($fp, $head);  
       
    // 计数器  
    $cnt = 0;  
    // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小  
    $limit = 40000;
       
    // 逐行取出数据,不浪费内存  
    $count = count($data);  
    for($t=0;$t<$count;$t++) {  
       
        $cnt ++;  
        if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题  
            ob_flush();  
            flush();  
            $cnt = 0;  
        }  
        $row = $data[$t];  


        $new_row = array();
        foreach ($row as $i => $v) { 
            $new_row['a'] = iconv('utf-8', 'gbk', $row['a']."\t");  
            $new_row['b'] = iconv('utf-8', 'gbk', $row['b']);  
            $new_row['c'] = iconv('utf-8', 'gbk', $row['c']);  
        } 
        fputcsv($fp, $new_row);  
    } 
}
//测试执行
exportexcel();


本文作者: Liaodeity

本文链接: https://www.jianbaizhan.com/article/291.html

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!


 请勿发布不友善或者负能量的内容。审查将对发布广告等违规信息进行处罚!