[TOC]
## **本例以thinkphp5.1為例**
包地址:
~~~
https://packagist.org/packages/phpoffice/phpexcel
~~~
使用:
~~~
composer require phpoffice/phpexcel
~~~
控制器引入
~~~
//引入phpoffice
use PHPExcel;
use PHPExcel_IOFactory;
導出代碼:
~~~
~~~
//execl模板下載
public function template_download()
{
$objExcel = new PHPExcel();
$objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
$objActSheet = $objExcel->getActiveSheet(0);
$objActSheet->setTitle('會員批量導入模板'); //設置excel的標題
$objActSheet->setCellValue('A1', '用戶id');
$objActSheet->setCellValue('B1', '昵稱');
$objActSheet->setCellValue('C1', '手機號');
$baseRow = 2; //數據從N-1行開始往下輸出 這里是避免頭信息被覆蓋
//默認數據
$explame_data = array(
array(
'user_id' => '1',
'nickname' => '小明',
'phone' => '15012345678',
),
);
foreach ($explame_data as $key => $value) {
$i = $baseRow + $key;
$objExcel->getActiveSheet()->setCellValue('A' . $i, $value['user_id']);
$objExcel->getActiveSheet()->setCellValue('B' . $i, $value['nickname']);
$objExcel->getActiveSheet()->setCellValue('C' . $i, $value['phone']);
}
$objExcel->setActiveSheetIndex(0);
//4、輸出
$objExcel->setActiveSheetIndex();
header('Content-Type: applicationnd.ms-excel');
$time = date('Y-m-d');
header("Content-Disposition: attachment;filename=會員批量導入模板" . $time . ".xls");
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
}
~~~
導入代碼:
~~~
public function import_batch_send()
{
header("content-type:text/html;charset=utf-8");
//上傳excel文件
$file = request()->file('file');
//將文件保存到public/uploads目錄下面
$info = $file->validate(['size' => 1048576, 'ext' => 'xls,xlsx'])->move('./uploads');
if ($info) {
//獲取上傳到后臺的文件名
$fileName = $info->getSaveName();
//獲取文件路徑
$filePath = Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $fileName;
//獲取文件后綴
$suffix = $info->getExtension();
//判斷哪種類型
if ($suffix == "xlsx") {
$reader = \PHPExcel_IOFactory::createReader('Excel2007');
} else {
$reader = PHPExcel_IOFactory::createReader('Excel5');
}
} else {
return json(['status' => '1', 'message' => '文件過大或格式不正確導致上傳失敗-_-!']);
}
//載入excel文件
$excel = $reader->load($filePath, $encode = 'utf-8');
//讀取第一張表
$sheet = $excel->getSheet(0);
//獲取總行數
$row_num = $sheet->getHighestRow();
//獲取總列數
$col_num = $sheet->getHighestColumn();
$import_data = []; //數組形式獲取表格數據
for ($i = 2; $i <= $row_num; $i++) { $import_data[$i]['nickname'] = $sheet->getCell("B" . $i)->getValue();
$import_data[$i]['phone'] = $sheet->getCell("C" . $i)->getValue();
}
if (empty($import_data)) {
return json(['status' => '1', 'message' => '數據解析失敗']);
}
//校驗手機號是否重復
$phone_array = array_column($import_data, 'phone');
$phone_ids = implode(',', $phone_array);
$result_phone = db('user')
->field('phone')
->where('phone', 'in', $phone_ids)
->select();
if (!empty($result_phone)) {
$result_phone_array = array_column($result_phone, 'phone');
$result_phone_ids = implode(',', $result_phone_array);
return json(['status' => '3', 'message' => '數據重復', 'result' => $result_phone_ids]);
}
//將數據保存到數據庫
$res = db('user')->insertAll($import_data);
if ($res) {
return json(['status' => '2', 'message' => '導入成功']);
} else {
return json(['status' => '1', 'message' => '提交失敗,請刷新重試']);
}
}
~~~
\--------------------------------------------
~~~
public function addPost_import()
{
header("content-type:text/html;charset=utf-8");
//上傳excel文件
$file = request()->file('file');
$pro_id = input('pro_id');
//將文件保存到public/uploads目錄下面
$info = $file->validate(['size' => 1048576, 'ext' => 'xls,xlsx'])->move('./uploads');
if ($info) {
//獲取上傳到后臺的文件名
$fileName = $info->getSaveName();
//獲取文件路徑
//$filePath = Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $fileName;
$filePath_ = 'uploads' . DIRECTORY_SEPARATOR . $fileName;
//獲取文件后綴
$suffix = $info->getExtension();
//判斷哪種類型
if ($suffix == "xlsx") {
$reader = \PHPExcel_IOFactory::createReader('Excel2007');
} else {
$reader = PHPExcel_IOFactory::createReader('Excel5');
}
} else {
//return json(['status' => '1', 'message' => '文件過大或格式不正確導致上傳失敗-_-!']);
$this->error(lang("文件過大或格式不正確導致上傳失敗-_-!"), url("coupon/import"));
}
//載入excel文件
$excel = $reader->load($filePath_, $encode = 'utf-8');
//讀取第一張表
$sheet = $excel->getSheet(0);
//獲取總行數
$row_num = $sheet->getHighestRow();
//獲取總列數
$col_num = $sheet->getHighestColumn();
$import_data = []; //數組形式獲取表格數據
for ($i = 1; $i <= $row_num; $i++) {
$import_data[$i]['coupon_name'] = $sheet->getCell("A" . $i)->getValue();
$import_data[$i]['create_time'] = date('Y-m-d H:i:s');
$import_data[$i]['pro_id'] = $pro_id;
}
//dump($import_data);die;
if (empty($import_data)) {
//return json(['status' => '1', 'message' => '數據解析失敗']);
$this->error(lang("數據解析失敗"), url("coupon/import"));
}
//校驗優惠券是否重復
$coupon_array = array_column($import_data, 'coupon_name');
// dump($coupon_array);die;
// $phone_ids = implode(',', $phone_array);
$result_phone = db('coupon')
->field('coupon_name')
->whereIn('coupon_name', $coupon_array)
->select()
->toArray();
//$result_phone_array = array_column($result_phone, 'coupon_name');
// dump($result_phone_array);die;
if (!empty($result_phone)) {
$result_phone_array = array_column($result_phone, 'coupon_name');
//$result_phone_ids = implode(',', $result_phone_array);
//return json(['status' => '3', 'message' => '數據重復', 'result' => $result_phone_ids]);
$this->error(lang("數據重復"), url("coupon/import"));
}
$result_phone_array =' error';
//將數據保存到數據庫
$res = db('coupon')->insertAll($import_data);
if ($res) {
$this->success(lang("導入成功"), url("coupon/index"));
// return json(['status' => '2', 'message' => '導入成功']);
} else {
$this->error(lang("導入失敗,重新導入"), url("coupon/import"));
}
}
~~~

\-----------------------------------------------------------------------------------------------------------
# PHP7.2環境中PHPExcel無法導出Excel
# 問題
> 這幾天接到一個bug,說的是有某一個后臺的列表頁有一個excel導出功能,最近不能使用了,我立即登陸系統發現確實如此,但是這個上線項目已經運行長達2年,中間并沒有出現問題,于是我拉出源碼進行分析,但是代碼看不出明顯錯誤,于是馬上進行斷點測試。
# 分析

經過測試發現問題出在PHPExcel上面,執行方法save()會報500 Internet sever error。根據經驗這一般是權限問題,我馬上檢查文件夾權限,但是一切正常。這就很奇怪了,于是查閱資料用了網上所有的方法依然沒有恢復,就在我一籌莫展的時候,突然想起前段時間升級了7.2版本PHP,于是我動手查閱資料,果然發現問題!


PHPExcel官方已不再維護了這個項目了,PHPExcel的版本停止在1.8。那個時候也沒有7.2,所有兼容性當然沒有考慮。由于官方已經停止維護我們也不能獲取補丁,那我們只能考慮換一個插件去處理。
選擇
官方團隊在github上又起了一個新項目,叫PhpSpreadsheet,新項目使用了大量的php新特性,比如命名空間,PSR標準,性能也比PHPExcel高了不少。GItHub點這里

如果只是單獨的導出excel且數據量巨大的話,我推薦PHP\_XLSXWriter,它并沒有PHPExcel功能豐富,很多高級操作比如凍結表頭,并不具備,但是它導出速度非常快,非常適合于數據量特別大,報表格式不是很復雜的導出需求。GitHub點這里
其大概的用法可以參考大佬寫的博文,[戳這里](https://segmentfault.com/a/1190000010178094?utm_source=coffeephp.com)?https://segmentfault.com/a/1190000010178094?utm\_source=coffeephp.com
思考
最終我選擇PHP\_XLSXWriter完成替換,從而解決BUG,從這次BUG中我意識到一個問題,每當升級PHP版本時,插件相應的升級刻不容緩。就像php7.2剛出來的時候YII2等主流框架會報致命錯誤,其原因就是7.2將Object作為了關鍵字,而框架將其定義為類。所以導致錯誤,一樣是不向下兼容的錯誤。盡量避免錯誤,需要在每次更新版本前多去研究其特性,才可能規避BUG,最后說一句,祝大家永無BUG。
————————————————
版權聲明:本文為CSDN博主「RE\_PHPzjw」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/RE\_PHPzjw/article/details/80847299
轉載?[https://blog.csdn.net/RE\_PHPzjw/article/details/80847299](https://blog.csdn.net/RE_PHPzjw/article/details/80847299)
# \------[使用PHP\_XLSXWriter代替PHPExcel](https://segmentfault.com/a/1190000010178094)\----------------------------
## 二者有何區別?
`PHPExcel`?是一個處理`Excel`,`CVS`文件的開源框架,它基于微軟的`OpenXML`標準和`PHP`語言。可以使用它來讀取、寫入不同格式的電子表格,這也是`PHP`至今最通用的`Excel`處理工具,但是它有一個非常致命的缺點: 特別占內存,對大批量的表格數據幾乎會讓人累覺不愛,處理速度非常慢,但是它功能非常豐富,`API`非常多,所以在導出復雜格式的`Excel`表格時,你往往不得不使用它,真是讓人又愛又恨。
不幸的是,`PHPExcel`官方已不再維護了這個項目了,官方團隊在`github`上又起了一個新項目,叫`PhpSpreadsheet`,新項目使用了大量的`php`新特性,比如命名空間,`PSR`標準,性能也比`PHPExcel`高了不少,不過該項目至今(2017-07-12)還是開發狀態,最小穩定版還沒出來,估計`bug`會比較多,所以并不建議使用,下圖是項目遷移說明:

相比于`PHPExcel`,`PHP_XLSXWriter`是一個小而強悍的`Excel`讀寫插件,它并沒有`PHPExcel`功能豐富,很多高級操作比如凍結表頭,并不具備,但是它導出速度非常快,非常適合于數據量特別大,報表格式不是很復雜的導出需求,下圖是官方的速度和內存測試:

## `PHP_XLSXWriter`?如何使用?
### 下載
這是?[PHP\_XLSXWriter](https://github.com/mk-j/PHP_XLSXWriter)的`github`地址,你可以點擊下載把它下載下來。解壓之后你可以看到,它的核心文件只有一個:?`xlswriter.class.php`,`examples`目錄為代碼樣例目錄,里面有很多例子你可以參考。

### 使用
對于日常中絕大部分的報表需求,`PHP_XLSXWriter`?是可以勝任的,下面通過一個例子來熟悉一下`API`的使用。
假設我們要導出下圖中的報表,并通過瀏覽器實現下載:

代碼實現:
~~~
//writer 類
$writer = new XLSXWriter();
//文件名
$filename = "example.xlsx";
//設置 header,用于瀏覽器下載
header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
//導出的數據
$string = array (
0 =>
array (
'payc_bill_time' => '2017-07-12 16:40:44',
'payt_received_date' => '2017-07-12',
'ci_name' => '租金',
'payt_num' => 'YRZB(2012)A0047',
'payt_scsr_name' => '李巧紅',
'payt_received' => '300.00',
'paytd_type' => '現金',
'emp_name' => '鄭振標',
),
1 =>
array (
'payc_bill_time' => '2017-07-12 16:39:55',
'payt_received_date' => '2017-07-12',
'ci_name' => '租金',
'payt_num' => 'YRZB(2012)A0046',
'payt_scsr_name' => '22222',
'payt_received' => '45.00',
'paytd_type' => '現金',
'emp_name' => '鄭振標',
)
);
//每列的標題頭
$title = array (
0 => '開單時間',
1 => '收款時間',
2 => '開票項目',
3 => '票據編號',
4 => '客戶名稱',
5 => '實收金額',
6 => '收款方式',
7 => '收款人',
);
//工作簿名稱
$sheet1 = 'sheet1';
//對每列指定數據類型,對應單元格的數據類型
foreach ($title as $key => $item){
$col_style[] = $key ==5 ? 'price': 'string';
}
//設置列格式,suppress_row: 去掉會多出一行數據;widths: 指定每列寬度
$writer->writeSheetHeader($sheet1, $col_style, ['suppress_row'=>true,'widths'=>[20,20,20,20,20,20,20,20]] );
//寫入第二行的數據,順便指定樣式
$writer->writeSheetRow($sheet1, ['xxx財務報表'],
['height'=>32,'font-size'=>20,'font-style'=>'bold','halign'=>'center','valign'=>'center']);
/*設置標題頭,指定樣式*/
$styles1 = array( 'font'=>'宋體','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee',
'halign'=>'center', 'border'=>'left,right,top,bottom');
$writer->writeSheetRow($sheet1, $title,$styles1);
// 最后是數據,foreach寫入
foreach ($data as $value) {
foreach ($value as $item) { $temp[] = $item;}
$rows[] = $temp;
unset($temp);
}
$styles2 = ['height'=>16];
foreach($rows as $row){
$writer->writeSheetRow($sheet1, $row,$styles2);
}
//合并單元格,第一行的大標題需要合并單元格
$writer->markMergedCell($sheet1, $start_row=0, $start_col=0, $end_row=0, $end_col=7);
//輸出文檔
$writer->writeToStdOut();
exit(0);
~~~
上面的每行代碼都做了注釋,如果不懂得話可以去查看一下`example`文件夾中的代碼樣例以及官網主頁的文檔,不過文檔比較簡短;
~~~
//writer 類
$writer = new XLSXWriter();
//文件名
$filename = "example.xlsx";
//設置 header,用于瀏覽器下載
header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"');
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
//導出的數據
$string = array (
0 =>
array (
'payc_bill_time' => '2017-07-12 16:40:44',
'payt_received_date' => '2017-07-12',
'ci_name' => '租金',
'payt_num' => 'YRZB(2012)A0047',
'payt_scsr_name' => '李巧紅',
'payt_received' => '300.00',
'paytd_type' => '現金',
'emp_name' => '鄭振標',
),
1 =>
array (
'payc_bill_time' => '2017-07-12 16:39:55',
'payt_received_date' => '2017-07-12',
'ci_name' => '租金',
'payt_num' => 'YRZB(2012)A0046',
'payt_scsr_name' => '22222',
'payt_received' => '45.00',
'paytd_type' => '現金',
'emp_name' => '鄭振標',
)
);
//每列的標題頭
$title = array (
0 => '開單時間',
1 => '收款時間',
2 => '開票項目',
3 => '票據編號',
4 => '客戶名稱',
5 => '實收金額',
6 => '收款方式',
7 => '收款人',
);
//工作簿名稱
$sheet1 = 'sheet1';
//對每列指定數據類型,對應單元格的數據類型
foreach ($title as $key => $item){
$col_style[] = $key ==5 ? 'price': 'string';
}
//設置列格式,suppress_row: 去掉會多出一行數據;widths: 指定每列寬度
$writer->writeSheetHeader($sheet1, $col_style, ['suppress_row'=>true,'widths'=>[20,20,20,20,20,20,20,20]] );
//寫入第二行的數據,順便指定樣式
$writer->writeSheetRow($sheet1, ['xxx財務報表'],
['height'=>32,'font-size'=>20,'font-style'=>'bold','halign'=>'center','valign'=>'center']);
/*設置標題頭,指定樣式*/
$styles1 = array( 'font'=>'宋體','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee',
'halign'=>'center', 'border'=>'left,right,top,bottom');
$writer->writeSheetRow($sheet1, $title,$styles1);
// 最后是數據,foreach寫入
foreach ($data as $value) {
foreach ($value as $item) { $temp[] = $item;}
$rows[] = $temp;
unset($temp);
}
$styles2 = ['height'=>16];
foreach($rows as $row){
$writer->writeSheetRow($sheet1, $row,$styles2);
}
//合并單元格,第一行的大標題需要合并單元格
$writer->markMergedCell($sheet1, $start_row=0, $start_col=0, $end_row=0, $end_col=7);
//輸出文檔
$writer->writeToStdOut();
exit(0);
~~~
## 跳坑指南:
自己在使用過程中也踩過一些坑,這里列一下,希望對你有幫助:
### 文件名與類名不對應
在使用`require`或`require_once`時,這其實不是問題,但當使用自動加載時因為二者不對應就無法識別。你或許想把`xlsxwriter.class.php`文件引入到你的項目中,并且加上命名空間,以便于能實現自動加載。此時你需要做的是把文件名更改為類名`XLSXWriter.class.php`(這里引入到TP中),比如我放到`Component`目錄下,那么在該文件中添加命名空間`namespace Component;`,此時該文件中還有個`Zip`類未引入命名空間,需要添加`use ZipArchive;`
這些完成后,就可以在項目中其他地方使用了:
~~~
use Component;
$writer = new XLSXWriter();
~~~
### 如何設置列格式?
不同的列可能會需要顯示不同的格式,默認的都是文本格式,但有時候需要顯示為數字列,比便于使用excel中的函數,比如上表中的金額列,必須是兩位小數點,千分位,數字格式。
看上面的代碼,數字格式其實是在`writeSheetHeader`方法中設置的,類型為`price`的那一列就是金額列,如果你需要其他格式,官網首頁上列出了常用的格式。
### 能不能單獨設置某個單元格的值?
這個目前并沒有實現,現在數據的寫入都是`逐行`寫入的,不支持這么細的粒度,不過折中的做法是把不需要填充的單元格寫入`null`即可;
如果有什么使用問題,可以在下面留言,一起探討使用方式:)
轉載 :[https://segmentfault.com/a/1190000010178094?utm\_source=coffeephp.com](https://segmentfault.com/a/1190000010178094?utm_source=coffeephp.com)
# **附錄**
## 基于jq的input file文件上傳
input file文件上傳很多人都遇見過,就樣式問題就有一大堆的問題,默認樣式實在是不敢恭維,但在此今天不討論樣式的問題,只給一個大致的思路,一個div包括一個span和一個input,分別設置兩個的定位,然后給input設置opacity為0,設置好寬度充滿div,在設置好span的樣式即可。
眾所周知,ajax不能傳遞文件,但是html的formdata可以。
### [](https://zhjdeitiny.github.io/2018/08/21/jq%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%B0%8F%E7%BB%93/#html%E4%BB%A3%E7%A0%81 "html代碼")html代碼
~~~
<p class="selected-box">
<form class="selected-wrap" id="form1" action="Upload" method="post" enctype="multipart/form-data">
<input type="file" class="selected-btn" id ="file" name="file">
</form>
<span class="selected-file">選擇本地</span>
</p>
<div class="leading-in">導入</div>
~~~
我的代碼是點擊選擇本地出發input file的按鈕選擇文件,然后點擊導入出發ajax,中間還會判斷是否已選擇文件,沒有選擇的話,提示它,選擇文件不對的話,也提示(我這邊判斷的是Execl文件,下方代碼有)。其中需要注意的是必須要用form標簽包裹,注意action、method和enctype屬性,其中特別需要注意的是**enctype**屬性必須為**multipart/form-data**,這樣子才能將文件處理為一個二進制的文件,后臺才能夠進行接收。
??PS:action這個屬性其實也可以不填,它是放地址的,我們在ajax中會有提交地址的;
????enctype這個屬性其實也可以不在標簽中添加,不過在js中的屬性contentType就必須設置為multipart/form-data,
* 簡單來講
> 如果你的input file標簽里面**使用了enctype=”multipart/form-data”**,JQ中這兩個屬性就要這樣寫**processData: false, contentType: false**
> 如果如果你的input file標簽里面**沒有使用 enctype=”multipart/form-data”**,JQ就要這樣寫**processData: false,contentType: “multipart/form-data”**。
### [](https://zhjdeitiny.github.io/2018/08/21/jq%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%B0%8F%E7%BB%93/#js%E4%BB%A3%E7%A0%81 "js代碼")js代碼
~~~
$(".leading-in").on("click",function(){
var name = $(".selected-txt select option:selected").val();
var flag = $(".selected-btn").val();
var hzm = flag.substr(flag.indexOf(".")+1);
if(flag == ""){
alert("請選擇要上傳的文件");
}else if(hzm != "xls" && hzm != "xlsx"){
alert("請選擇Excel格式的文件");
}else{
var forData = new FormData();
forData.set("importfile", $("#file")[0].files[0]);
forData.set("systemName", name);
// 多個文件上傳的情況,需要啊后臺進行字段匹配如:上方的importfile
// var i;
// for (i = 0; i < $('.select-file').files.length; i++) {
//
// forData.append('file[]', this.files[i]);
// }
$.ajax({
url: baselocation + "/system/file/import",
type: 'post',
data: forData,
cache: false,
processData: false,
contentType: false,
success:function(json){
if(json.success == "success"){
alert("上傳成功");
}else{
alert("上傳失敗");
}
},error:function(){
}
});
}
})
~~~
js代碼中我先判斷獲取文件的后綴名是不是我自己想要的類型文件,然后進行相應的提示,然后就新建一個FormData對象,然后把文件添加到里面,規則名一個要和后臺確定好,如果還有其他的屬性的,一并放到FormData的對象中就好,畢竟一個單獨的屬性,沒有必要單獨拿出來去提交,直接放到對象里面一起提交就好。
### [](https://zhjdeitiny.github.io/2018/08/21/jq%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%B0%8F%E7%BB%93/#%E5%B0%8F%E7%BB%93 "小結")小結
* 1、**cache**:cache設為false可以禁止瀏覽器對該URL(以及對應的HTTP方法)的緩存。 jQuery通過為URL添加一個冗余參數來實現。
* 2、**contentType**:jQuery中content-type默認值為application/x-www-form-urlencoded,因此傳給data參數的對象會默認被轉換為query string,我們不需要jQuery做這個轉換,否則會破壞掉multipart/form-data的編碼格式。 因此設置contentType: false來禁止jQuery的轉換操作。
* 3、**processData**:jQuery會將data對象轉換為字符串來發送HTTP請求,默認情況下會用 application/x-www-form-urlencoded編碼來進行轉換。 我們設置contentType: false后該轉換會失敗,因此設置processData: false來禁止該轉換過程。我們給的data就是已經用FormData編碼好的數據,不需要jQuery進行字符串轉換。(它與enctype的關系上方已經闡述)
如果有多文件的情況,代碼中也有注釋,前提是一定要和后臺定好參數規則,建議比如說:file\[文件索引\]這樣的規則,后臺拿到數據之后出掉一些定義好的其他屬性,根據length,一個一個去取好;
- 一、php一些常用的校驗
- 1.1、校驗是否為空(null/空串)
- 1.2、校驗是否為純數字
- 1.3、校驗是否為純數字(正則)
- 1.4、檢驗手機號
- 1.5、校驗郵箱格式
- 1.6、檢查密碼長度是否符合規定
- 二、手機類型訪問判斷
- 2.1、判斷是否為手機訪問
- 2.2、判斷是否為微信訪問
- 2.3、判斷是否為Android|IOS訪問
- 2.4、檢查手機格式,中國手機不帶國家代碼,國際手機號格式為:國家代碼-手機號
- 2..5、獲取隨機UA
- 2.6、is_get_post
- 三、字符集文件轉換
- 3.1、utf8轉gbk
- 3.2、gbk轉utf8
- 3.3、繁體轉簡體
- 3.4、簡體轉繁體
- 3.5、unicode轉utf8
- 3.6、utf8轉unicode
- 3.7、Ascii轉拼音
- 3.8、gbk轉拼音
- 3.9、數組 utf8轉gbk
- 3.10、數組 gbk轉utf8
- 3.11、json 處理gbk轉碼utf-8問題( json_encode轉換數組,值為null)
- 3.12、Unicode解碼
- 3.13、【PHP】實現搜索引擎中把搜索結果命中的關鍵字標記紅色
- 3.14、字符串截取
- 3.15、去除字符串中的指定字符
- 四、文檔目錄操作
- 4.1、轉化 \ 為 /
- 4.2、創建目錄
- 4.3、拷貝目錄及下面所有文件
- 4.4、轉換目錄下面的所有文件編碼格式
- 4.5、列出目錄下所有文件
- 4.6、設置目錄下面的所有文件的訪問和修改時間
- 4.7、目錄列表
- 4.8、刪除目錄及目錄下面的所有文件
- 4.9、取得文件擴展
- 4.10、查詢字符是否存在于某字符串
- 4.11、獲取文件目錄列表
- 4.12、刪除一個路徑下的所有文件夾和文件的方法
- 4.13、文件下載
- 4.14、寫入文件日志
- 4.15、移動文件封裝方法
- 五、session與cookie
- 5.1、設置session
- 5.2、讀取session
- 5.3、清除session
- 六、CURL操作
- 6.1、發起get請求
- 6.2、發起post請求
- 6.3、curl獲取跳轉后的網址的url
- 6.4、curl判斷遠程圖片是否加防盜鏈
- 6.5、curl獲取301頁面的內容
- 6.6、curl判斷文件是否存在(404)
- 6.7、php的curl封裝類
- 七、日期、時間與字節轉換
- 7.1、轉換字節數為其他單位(Gb、Mb等)
- 7.2、時間轉換(將秒轉換為時間)
- 7.3、將秒轉換成 天-時分秒
- 7.4、時間轉換(將時分秒轉換為秒)
- 7.5、計算兩個時間相差的天
- 7.6、獲取文件大小并格式化
- 7.7、返回13位時間戳
- 7.8、返回與當前時間的差距,如1分鐘前,2小時前,5月前等
- 7.8、PHP中DateTime的常用方法
- 7.9、生日(身份證號)轉年齡
- 7.10、密碼加密方法
- 八、對象、數組、字符串、轉義等
- 8.1、將數組轉換為對象
- 8.2、將對象轉換為數組
- 8.3、將字符串轉換為數組
- 8.4、將數組轉換為字符串
- 8.5、將文本格式成適合js輸出的字符串
- 8.6、返回經addslashes(轉義)處理過的字符串或數組
- 8.7、返回經stripslashes(刪除反斜杠)處理過的字符串或數組
- 8.8、返回經htmlspecialchars(字符轉html)處理過的字符串或數組
- 8.9、安全過濾函數
- 8.10、xss過濾函數
- 8.11、過濾ASCII碼從0-28的控制字符
- 8.12、格式化文本域內容
- 8.13、將文本格式成適合js輸出的字符串
- 8.14、轉義 javascript 代碼標記
- 8.15、數組轉碼
- 8.16、php用逗號格式化數字
- 8.17、數組去重
- 8.18、字符串去重
- 8.19、數組排序
- 8.20、兼容低版本的array_column
- 8.21、把返回的數據集轉換成Tree
- 8.22、判斷字符串是否為已經序列化過
- 8.23、截取指定兩個字符之間字符串
- 九、加密擴展
- 9.1、簡單的字符串加密、解密函數
- 9.2、簡單的加密解密類【棄用】
- 9.3、簡單對稱加密算法2
- 9.4、常用對稱加密算法(DES/AES)類
- 9.5、3des加密解密類-三重數據加密算法【棄用】
- 9.6、PHP7.* DES的加密解密
- 9.7、加密解密函數
- 十、隨機數、獲取請求ip等
- 10.1、產生隨機字符串
- 10.2、獲取請求ip
- 10.3、生成一定范圍內的隨機數字
- 10.4、生成不重復的隨機數
- 10.5、生成一定數量的隨機數,并且不重復
- 10.6、生成32位隨機數
- 10.7、生成9位隨機數字(可以做qq用)
- 10.8、創建優惠券、會員卡號
- 10.9、php判斷是否梯子訪問
- 10.10 IP地區判斷
- 10.11獲取操作系統、瀏覽器信息
- 10.12、根據各種類型變量生成唯一標識符
- PHP 生成不重復唯一標識 session_create_id()
- 十一、其他
- 11.1、php對html頁面壓縮函數
- 11.2、構建層級(樹狀)數組、
- 11.3、獲取內容中的圖片
- 11.4、生成sql語句,如果傳入$in_cloumn 生成格式為 IN('a', 'b', 'c')
- 11.5、打印各種類型的數據,調試程序時使用。
- 11.6、URL重定向
- 11.7、替換html代碼里的所有圖片的url,新增url
- 11.8、去除html里的p標簽
- 11.9、去除字符串中所有html代碼(格式化代碼html)
- 11.10、將number_format的輸出轉換為php數字
- 11.11、使用Jquery插件jsonview來展示json數據
- 11.12、input()接收數據(get,post等)
- 11.13、return_json
- 11.14、圖片合成
- 11.15、將var_export 格式化為5.4數組
- 11.16、生成文件后綴圖片
- 11.17、跨域檢測
- 11.18、切分SQL文件成多個可以單獨執行的sql語句
- 11.19、XML編碼
- 11.20、分享URL壓縮
- 11.21、PHP抓取遠程圖片到本地保存
- 11.22、PHP網址縮短算法代碼(修復PHP7.0問題)
- 11.23、input xss clear
- 11.24、獲取遠程圖片顯示(遠程403)
- 11.24、xml轉數組以及數組轉xml
- 11.7、內容里批量替換圖片的url地址為自己的地址
- 十二、類庫
- 1、php 5.6.3PHP封裝的數據庫模型Model類完整示例【基于PDO】
- 2、Curl類庫
- 3、php PDO數據庫類庫
- 4、獲取網站title
- 5、極光推送類
- 6、php中文轉拼音類
- 7、php 提取HTML文章中的圖片地址類
- 8、php FTP操作類
- php獲取MAC地址
- 9、【PHP】使用phpoffice/phpexcel,導入導出數據
- 10、根據ip解析為地區-省市
- 11、PHP PUT方式上傳
- 12、Env環境變量類庫
- 13、圖片裁剪并緩存
- 14、翻譯類庫【有道、百度】
- 15、xml數據的創建與讀取
- 16、微信公眾號關鍵詞自動回復
- 17、功能強大的php文件上傳類