PHP使用fputcsv+iconv原生函数实现CSV文件导出功能 PHP导出CSV文件实现方法
PHP开发过程中,经常会需要把输出的数据导出EXCEL表格,其中应用最多的是导出为CSV格式的表格,因为CSV兼容性更强,不单单EXCEL能处理,WPS也可以,部分数据库还支持CSV直接导入,因此应用最广。这里教大家如何轻松快速的使用PHP将数据输出为CSV格式文件
这里主要使用到PHP的两个函数fputcsv和iconv
fputcsv(PHP 5 >= 5.1.0, PHP 7) fputcsv — 将行格式化为 CSV 并写入文件指针 说明:fputcsv() 将一行(用 fields 数组传递)格式化为 CSV 格式并写入由 handle 指定的文件。 用法:fputcsv ( resource $handle , array $fields [, string $delimiter = ',' [, string $enclosure = '"' ]] ) : int
iconv(PHP 4 >= 4.0.5, PHP 5, PHP 7) iconv — 字符串按要求的字符编码来转换 说明:将字符串 str 从 in_charset 转换编码到 out_charset。 用法:iconv ( string $in_charset , string $out_charset , string $str ) : string
完整参考代码:
foreach((array)$output as $key=>$value){ //导出CSV用的数据 if($_GET['csv']=='yes'){ $csv[$key]['num']=$num1; $csv[$key]['time']=$outtime; $csv[$key]['action']='('.$source.')'.$action; $csv[$key]['ip']=$value["ip"]; $csv[$key]['ip_class']=$value["ip_class"].'['.$out_put[$action][$outip].'/'.$ipnum.']'; $csv[$key]['country']=$countryb; $csv[$key]['colo']=$value["colo"]; $csv[$key]['ua']=$value["ua"]; $csv[$key]['firewallrule']=$firewallrule[$rule_id]['filter']['expression']; $csv[$key]['method']=$value["method"]; $csv[$key]['url']=$value["scheme"].'://'.$value["host"].$value["uri"]; } //导出CSV用的数据处理结束 } //导出CSV if($_GET['csv']=='yes'){ $fileName = time(); //这里定义下载时候显示的表名。简单点的就直接 $fileName = time(); header('Content-Type: application/vnd.ms-excel'); //header设置 header("Content-Disposition: attachment;filename=".$fileName.".csv"); header('Cache-Control: max-age=0'); $fp = fopen('php://output','a'); //打开php文件句柄,php://output表示直接输出到PHP缓存,a表示将输出的内容追加到文件末尾 $head = array('顺序','时间','触发规则','IP地址','IP类型/第几次/总次数','国别','CF节点','UA','规则','请求方式','网址'); //表头信息 foreach($head as $k=>$v){ $head[$k] = iconv("UTF-8","GBK//IGNORE",$v); //将utf-8编码转为gbk。理由是: Excel 以 ANSI 格式打开,不会做编码识别。如果直接用 Excel 打开 UTF-8 编码的 CSV 文件会导致汉字部分出现乱码。 } fputcsv($fp,$head); //fputcsv() 函数将行格式$head化为 CSV 并写入一个打开的文件$fp。 $data = []; //要导出的数据的顺序与表头一致;提前将最后的值准备好(比如:时间戳转为日期等) foreach ($csv as $key => $val) { foreach($val as $i=> $item){ //$item为一维数组哦 $data[$i] = iconv("UTF-8","GBK//IGNORE",$item); //转为gbk的时候可能会遇到特殊字符‘-’之类的会报错,加 ignore表示这个特殊字符直接忽略不做转换。 } fputcsv($fp,$data); } unset($csv);unset($data); exit; //记得加这个,不然会跳转而不会进行CSV下载输出。 }//IF结束 //导出CSV完成
顶(0)
踩(0)
- 最新评论