多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[toc] ## :-: **导出 CSV get方式,直接下载** ```php /** * 导出 CSV get方式,直接下载 * @access public * @param array $nameArr 要 array('导出的表中的字段名'=>'中文命名','导出的表中的字段名'=>'中文命名') 一维数组,表头 * @return array $sqlArr 数据库查出的数据。二维数组 * @return string $name 导出CSV 时的命名 * * 调用示例 $arr = ['name'=>'姓名','age'=>'年龄']; $res = [['name'=>'西瓜','age'=>25],['name'=>'杨熙','age'=>26]]; var_dump($arr); csv($arr,$res,'西瓜'); */ function csv($nameArr = "", $sqlArr = "", $name = "") { foreach ($nameArr as $key => $value) { iconv('utf-8', 'gbk', $value); //转为中文 $str[] = $value; } $str = implode(',', $str); $str .= "\n"; //用引文逗号分开 foreach ($sqlArr as $key => $value) { $array = array_change_key_case($value, CASE_LOWER); //返回字符串键名全为小写或大写的数组 $chanJi = array_diff_key($array, $nameArr); //使用键名比较计算数组的差集 $jiaoji[] = array_diff_key($array, $chanJi); } $jiaoji = array_values($jiaoji); //只取值 foreach ($jiaoji as $key => $value) { $arrValues[] = implode(',', $value); } $string = implode("\n", $arrValues); $str .= $string; // var_dump($str);exit; $str = iconv('utf-8', 'gbk//TRANSLIT', $str); //转为中文 /*去除特殊符号*/ $regex = "/\/|\~|\!|\|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\<|\>|\?|\[|\]|\|\.|\/|\;|\'|\=|\\\|\|/"; $str = preg_replace($regex, "", $str); $filename = "$name" . date('YmdHis') . '.csv'; //设置文件名 $data = $str; 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'); echo $data;exit; } ``` ## :-: **导出csv格式** ```php /** * 自带下载功能,导出csv格式 * @param $taheader 表格头部,传个一维数组 * @param $data 表格数据,传个二维数组 * @return string */ function createCSV($taheader,$data){ $tableheader = $taheader; $tablelength = count($tableheader); /*输入到CSV文件 解决乱码问题*/ $html = "\xEF\xBB\xBF"; /*输出表头*/ foreach ($tableheader as $value) { $html .= $value . "\t ,"; } $html .= "\n"; /*遍历二维数组,输出内容*/ foreach ($data as $value) { for ($i = 0; $i < $tablelength; $i++) { $html .= $value[$i] . "\t ,"; } $html .= "\n"; } /*输出CSV文件*/ header("Content-type:text/csv"); header("Content-Disposition:attachment; filename=全部数据.csv"); return $html; } ``` ## :-: **下载** ```php /*** * @@@@ 下载 */ function downloadFile($sTitle, $sFilePath){ $charset = 'UTF-8'; $attachmentHeader = "Content-Disposition: attachment; filename=\"{$sTitle}\"; charset=\"{$charset}\""; // var_dump($attachmentHeader);die; ob_end_clean(); ob_start(); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header($attachmentHeader); //ie 无法下载 来自 无法打开该internet 站点 的问题 header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Transfer-Encoding: binary"); echo file_get_contents($sFilePath); } ``` ## :-: **将数据导出到txt && 下载** ```php /** * 将数据导出到txt && 下载 * downTxt('hello','D:\phpStudy\WWW\test\down\\',['第1列','第2列','第3列'],$data); //调用示例 * @param $fileName 要生成的文件名 * @param $savePath 保存到服务器的地址 'D:\phpStudy\WWW\test\down\\' * @param $tableHeader 表头,传个一维数组 ['第1列','第2列','第3列'] $data = [ '男装'=>['上衣','裤子'], '女装'=>['泡泡袖','连衣裙'] ]; * @param $data 数据,传个二维数组 $data */ function downTxt($fileName,$savePath,$tableHeader,$data){ $name = $fileName . date('Y-m-d_H-i-s', time()). ".txt"; //文件名 $path = $savePath . $name; //保存到服务器上的路径 $html = "\xEF\xBB\xBF"; //解决乱码问题 //输出表头 foreach ($tableHeader as $v) { $html .= $v . "\t|"; } $html .= "\r\n"; //遍历二维数组,输出内容 foreach ($data as $key => $value) { $html .= $key."\t|"; foreach ($value as $kk => $vv) { $html .= $vv."\t|"; if($kk != end($value)){ //当前key 不等于 该数组中的最后一个key $html .= "\r\n"; //回车,换行 } } } //保存文件 $txtFile = fopen($path,'a+'); fwrite($txtFile,$html); fclose($txtFile); downloadFile($name,$path); //调下载文件的方法 } ``` ## :-: **自带下载功能,导出TXT格式** ```php /** * 自带下载功能,导出TXT格式 * @param $finame 文件名。数据类型为字符串 * @param $content 文件要写入的内容。数据类型为字符串 * @param string $postfix 要生成什么格式。只有2种.txt和.doc可选。如果是.doc可以生成,里面没有图片和链接的word格式 */ function createTxt($finame,$content,$postfix='.txt'){ //第一步:处理中文文件名 $ua = $_SERVER["HTTP_USER_AGENT"]; //用的是什么浏览器 $filename = $finame.$postfix; //一定要记得拼.txt。不然程序不知道下载什么格式 $encoded_filename = urlencode($filename); //url编码 $encoded_filename = str_replace("+", "%20", $encoded_filename); //把 + 替换成 %20 //第二步:生成TXT文件 header("Content-Type: application/octet-stream"); if (preg_match("/MSIE/", $_SERVER['HTTP_USER_AGENT']) ) { header('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); } elseif (preg_match("/Firefox/", $_SERVER['HTTP_USER_AGENT'])) { header('Content-Disposition: attachment; filename*="utf8' . $filename . '"'); } else { header('Content-Disposition: attachment; filename="' . $filename . '"'); } echo $content; //拼接数据并以echo 返回 } ``` ## :-: **生成xml** ```php /** * 生成xml * @param $data 要放到xml中的数据,是个二维数组 * @param $fileName 要生成的文件名 * @param $filePath 在哪个目录下生成 * @return string 返回该文件所在的目录和文件名 */ function createXml($data,$fileName,$filePath){ $xml = "<?xml version='1.0' encoding='utf-8'?>\n"; $xml .= "<article>\n"; foreach ($data as $v) { $xml .= "<item>\n"; $xml .= "<name>"."<![CDATA[{$v['name']}]]>" ."</name>\n"; $xml .= "<age>" . "<![CDATA[{$v['age']}]]>" . "</age>\n"; $xml .= "</item>\n"; } $xml .= "</article>\n"; file_put_contents($filePath.$fileName,$xml); return $filePath.$fileName; } ``` 调用示例: ``` php $data = [ ['name' => '西瓜','age'=>26], ['name' => '西瓜1','age'=>26], ]; $fileName = 'e.xml'; $filePath = "D:/phpStudy/WWW/test/"; echo createXml($data,$fileName,$filePath); //调用示例 ```