php生成文件的函数,【封装php函数】--导入、导出、生成文件

生成文件:

$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 .= "\n";

foreach ($data as $v) {

$xml .= "\n";

$xml .= ""."" ."\n";

$xml .= "" . "" . "\n";

$xml .= "\n";

}

$xml .= "\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*/functiondownTxt($fileName,$savePath,$tableHeader,$data){$name=$fileName. date('Y-m-d_H-i-s',time()).".txt";//文件名$path=$savePath.$name;//保存到服务器上的路径$html="\xEF\xBB\xBF";//解决乱码问题//输出表头foreach($tableHeaderas$v) {$html.=$v."\t|";}$html.="\r\n";//遍历二维数组,输出内容foreach($dataas$key=>$value) {$html.=$key."\t|";foreach($valueas$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);//调下载文件的方法}

/**** @@@@下载*/functiondownloadFile($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");echofile_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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值