PHP导出数据到csv和execl文件

导出到.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)