您的位置:首页 > 编程语言 > PHP开发

PHP导出数据到csv和execl文件

2017-09-18 10:55 656 查看
导出到.csv文件

public function exportData() {
$fileName = 'file-'.date('YmdHis', time()). '.csv';//导出的文件名
header("Content-type:text/csv;");
header("Content-Disposition:attachment;filename=" . $fileName);
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');
header('Pragma:public');
$titleList = array('username','city','phone');
echo iconv('utf-8','gbk',''.implode(',', $titleList)."\n");
//从数据库中获取数据到arrData
foreach ($arrData as $key => $value) {
$output = array();
$output[] = $value['username'];
$output[] = $value['city'];
$output[] = $value['phone'];
echo iconv('utf-8','gbk',''.implode(',', $output)."\n");
}
}


header函数像客户端发送http报头

需要注意的一点是从数据库中拿出的数据如果过多,就会超过PHP的限制内存(这个内存可以在配置文件中修改,也可以在代码中设置一个临时的),但是如果数据过多设置的是不符合的,我的处理方法是每次从数据库中拿出不超过限制内存的数据,如10000条记录,这样因为是局部变量,所以可以避免,这是遇到的一个bug,因为开发经验不足导致

导出到excel文件:

public function exportGradeData() {
$fileName = '123456789';//导出的文件名
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=".$fileName.".xls");
$strexport = "姓名\t学号\t成绩\r";
//$list为从数据库中拿到的数据
foreach ($list as $row){
$strexport.=$row['name']."\t";
$strexport.=$row['id']."\t";
$strexport.=$row['score']."\r";
}
$strexport=iconv('UTF-8','GBK',$strexport);
header("Access-Control-Allow-Origin: *");
exit($strexport);
}

导出的是 .xls文件,兼容的,有些可能需要跨域的可以在header发送的http报头中加入倒数第三行代码

注意GBK可以识别更多的汉字,之前使用的GBK2312,在使用时报错,自测时没问题,可能是用到的汉字比较少的原因
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php