PHP 查询数据导出CSV格式文件下载

tech2025-11-13  4

/** * 导出CSV格式文件 调用事例: $select_arr = array( array('1','user','学生','二狗子','男','220802198563241258','13965441255','2020-8-20','正常','备注'), array('1','user','学生','二狗子','男','220802198563241258','13965441255','2020-8-20','正常','备注'), array('1','user','学生','二狗子','男','220802198563241258','13965441255','2020-8-20','正常','备注'), array('1','user','学生','二狗子','男','220802198563241258','13965441255','2020-8-20','正常','备注'), array('1','user','学生','二狗子','男','220802198563241258','13965441255','2020-8-20','正常','备注'), );//查询数据 $headername = array('ID','用户名','职业','真实名','性别','证件号','电话','注册时间','状态','备注');//设置表头 make_csv($select_arr,$headername); */ function make_csv($select_arr,$headername){ // 用户数据导出 ini_set('max_execution_time', 300);// 设置PHP超时时间 ini_set('memory_limit', '2048M');// 设置PHP临时允许内存大小 $queryResult = $this->db->select('id,username,sf,youname,sex,sfz,tel,regtime,status,beizhu')->get_where('user','id in('.$idnum.')')->result_array(); //路径 $fileName = date("Ymd_his_").time() . '.csv'; $filePath = '/main/temp/csv/' . $fileName; $index = 0; $fp = fopen($filePath, 'w'); //生成临时文件 chmod($filePath, 0755);//修改可执行权限 // 将数据通过fputcsv写到文件句柄 $header = $headername;//设置表头 fputcsv($fp, $header); //处理导出数据 foreach ($queryResult as $key => &$val) { foreach ($val as $k => $v) { $val[$k] = $v . "\t"; if ($index == 10000) { //每次写入1000条数据清除内存 $index = 0; ob_flush();//清除内存 flush(); } $index++; } fputcsv($fp, $val); } ob_flush(); fclose($fp); //关闭句柄 header("Cache-Control: max-age=0"); header("Content-type:application/vnd.ms-excel;charset=UTF-8"); header("Content-Description: File Transfer"); header('Content-disposition: attachment; filename=' . basename($fileName)); header("Content-Type: text/csv"); header("Content-Transfer-Encoding: binary"); header('Content-Length: ' . filesize($filePath)); @readfile($filePath);//输出文件; unlink($filePath); //删除压缩包临时文件 // echo $filePath; }

如遇到: PHP fopen()错误:无法打开流:权限被拒绝 解决办法如下:也不一定全对,不过我是用这种方法解决的。很简单

$filePath = '/main/temp/csv/' . $fileName;

如这行代码所示,/main/temp/csv/ 这是临时文件保存的位置,在这个位置新建一个空文件夹设置这个文件夹的权限为 755 解决问题,希望能对遇到相同问题的同仁们起到一点作用,这篇文章就不白写了。

最新回复(0)