CSV导出文件函数方法,csv导出大数据
最近在导出文件的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 许可协议。转载请注明出处!