[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參數