生成文件:
$data = [
['name' => '西瓜','age'=>26],
['name' => '西瓜1','age'=>26],
];
$fileName = 'e.xml';
$filePath = "D:/phpStudy/WWW/test/";
echo createXml($data,$fileName,$filePath); //调用示例
/**
* 生成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;
}
/**
* 自带下载功能,导出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 返回
}
/**
* 将数据导出到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); //调下载文件的方法
}
/***
* @@@@ 下载
*/
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);
}
/**
* 自带下载功能,导出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;
}
/**
* 导出 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;
}