[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); //调用示例
```
- 杂谈
- 开发 & 维护的工作流程
- 新手如何看php手册 和 框架手册
- 开发 & 维护的不同点
- 从0到1,搭建新项目的工作流程
- 从1到N,维护的工作流程
- 优化流程
- 生成错误日志和慢日志的方法
- 查错思路
- 怎么快速接手一个项目
- 前端常用知识点
- javascript
- 自己封装的函数
- 处理数字
- 功能代码
- 动态添加图片
- 判断是手机端还是pc端
- javascript:;是什么意思?怎么用呢
- html & h5
- a标签中target设置为blank和_blank有什么区别?
- 乱码
- 提交方式:button标签 和 input
- 块元素
- 内联元素
- h5特有属性
- h5的localStorage【增、删、改、查】
- jquery
- 常用方法
- 功能代码
- 动态删除图片
- 一个按钮,切换2种状态
- 换肤
- 深入理解(function(){... })();
- json & xml
- json
- 语法速记
- json对象取值
- 字符串、对象、数组的区别
- xml
- [CDATA[%s]]的作用是什么
- 转义字符
- CDATA 想被xml解析的文本数据
- CDATA 不想被xml解析的文本数据
- 微信小程序
- 其他
- websocket
- 跨域
- css
- 行内 & 内连 & 外连 写法
- 优先级
- 更加精准的匹配
- 使用百分比如何生效
- php在html、js、jq中的的原生写法
- *php在html中的语法
- php在js中的语法
- php在jq中的语法
- 正则表达式
- php常用基础知识(思想为主)
- php为什么是“边编译边运行”
- 冒号、endif、endwhile、endfor使用
- 递归思想(速记法)
- cookie和session的理解
- php常用内置(系统)函数
- 常量
- 字符串
- 数组
- 日期时间
- 文件 & 目录
- 数学
- 程序执行
- 判断
- 选项和信息(修改配置文件的)
- 错误处理 & 日志记录
- 编码格式
- session
- IP相关
- 类 & 对象
- 性能
- 其他函数
- 魔术方法
- $_SERVER
- 变量处理
- php自己封装的一些函数
- 导入、导出、生成文件
- 数组
- 数字
- 字符串
- 其他
- 获取linux硬件信息
- 常见插件/类库使用
- 前端-框架/插件
- bootstrap 学习笔记
- layer 学习笔记
- layDate 学习笔记
- 百度ueditor1.4.4.3富文本编辑器
- quill富文本编辑器
- 百度ECharts图形报表
- webuploader上传图片
- 后端类库
- workerman 聊天室
- QRCODE 二维码
- redis
- seaslog 日志
- phpspider 爬虫
- Mailer 发送邮件
- simple_html_dom
- phpstorm使用
- 快捷键
- 连接mysql数据库
- 断点 + debug调试
- 运行内存不够
- wamp环境
- yii、laravel、tp、开发自己的php框架
- 看框架源码的思路
- tp5框架的使用
- 1、助手函数原理解析
- 开发自己的php框架
- 常用的开发思路 和 小功能实现代码
- 爬虫思路
- 功能点思路
- tp5判断是不是异地登录(简单版)
- 微信开发,反向代理
- 微信开发,关闭当前页面
- 消息队列的实现
- 页面静态化
- session串号
- 站内信设计思路
- web在线管理器
- 语言相关(开发有关)
- 接收json(text/xml)格式数据
- 原生文件上传(状态码)
- openssl扩展
- 打印对象 和 遍历对象
- 使用OB缓存的几个原则
- CLI模式执行php文件
- foreach时,添加元素 或 修改元素的值
- 功能点 代码实现
- 生成url目录树(没有pid)
- 多图上传(vue传base64)
- 下载文件,耗时算法
- 生成商品二维码
- 导出excel
- 搜索
- 阿里大鱼发短信
- 使用阿里云oss
- location.href跳转后,丢失用户的session
- “\r ” “\r\n” “\t”的区别
- php的配置文件详解
- 开启错误日志
- 开启慢日志
- 开启短标签
- 分析php-fpm.conf中的request_terminate_timeout参数