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