合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
### **PHP fputcsv() 函数** 定义:fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件。 该函数返回写入字符串的长度。若出错,则返回 false。 方法一: function export() { set_time_limit(0); ini_set('memory_limit', '256M'); header('Content-Description: File Transfer'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="' . 'aa.csv' . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); //打开php数据输入缓冲区 $fp = fopen('php://output', 'a'); $heade = ['姓名', '性别', '手机号']; //将数据编码转换成GBK格式 mb_convert_variables('GBK', 'UTF-8', $heade); //将数据格式化为CSV格式并写入到output流中 fputcsv($fp, $heade); $data = [ ['小明', '男', 17699019191], ['小红', '男', 17699019191], ['小黑', '女', 17699019191], ['小白', '女', 17699019191], ]; //如果在csv中输出一个空行,向句柄中写入一个空数组即可实现 foreach ($data as $row) { //将数据编码转换成GBK格式 mb_convert_variables('GBK', 'UTF-8', $row); fputcsv($fp, $row); //将已经存储到csv中的变量数据销毁,释放内存 unset($row); } //关闭句柄 fclose($fp); die; } 方法二: /* * 该方法是把数据库读出的数据进行CSV文件输出,能接受百万级别的数据输出,因为用生成器,不用担心内存溢出。 * @param string $sql 需要导出的数据SQL * @param string $mark 生成文件的名字前缀 * */ function putCsv($data, $mark) { set_time_limit(0); header('Content-Type: application/vnd.ms-excel;charset=utf-8'); header('Content-Disposition: attachment;filename="' . $mark . '"'); header('Cache-Control: max-age=0'); $file_num = 0; //文件名计数器 $fileNameArr = array(); $fp = fopen($mark .'_'.$file_num .'.csv', 'w'); //生成临时文件 $fileNameArr[] = $mark .'_'.$file_num .'.csv'; fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF));//转码,防止乱码 foreach ($data as $a) { fputcsv($fp, $a); } fclose($fp); //每生成一个文件关闭 } $data = [ ['序号','姓名','年龄','性别'], ['111','vance','18','boy'], ['222','ashe','22','girl'] ]; $mark = 'test.csv'; putCsv($data,$mark); 方法三: function exportWarehouseManagementToExcel() { ini_set('max_execution_time', 300);// 设置PHP超时时间 ini_set('memory_limit', '2048M');// 设置PHP临时允许内存大小 $queryResult = [ ['100001','蓝牌','安徽','可用','2019-9-8'] ]; //路径 $fileName = '车管驻点业务寄递仓库管理所有数据' . date('Ymd_His') . '.csv'; $filePath = $fileName; $index = 0; $fp = fopen($filePath, 'w'); //生成临时文件 chmod($filePath, 0777);//修改可执行权限 // 将数据通过fputcsv写到文件句柄 $header = array('车牌号码', '车牌类型', '所在区域', '状态', '入库时间');//设置表头 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; return; }