當前位置:
首頁 > 知識 > PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

驗證碼

驗證碼是框架自帶有的,比之前使用GD庫簡單方便許多,其實現原理基本相似,都是生成圖片,保存驗證碼值到Session中,表單提交驗證碼,然後進行值的對比驗證。

簡單的顯示:

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

打開今日頭條,查看更多圖片

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

1 <form action="{:url("index/ii")}" method="post">
2
3 <!--驗證碼顯示方法1-->
4 <img src="{:captcha_src()}" alt="captcha" stylex="height: 80px ;width: 200px" />
5
6 <br/>
7
8 <!--驗證碼顯示方法2-->
9 <div>{:captcha_img()}</div>
10
11 <br/>
12
13 請輸入驗證碼:<input type="text" name="check">
14
15 <br/>
16
17 <input type="submit" value="提交">
18
19 </form>

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

實現點擊驗證碼進行切換:

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

1 <form action="{:url("index/ii")}" method="post">
2
3 <input type="text" name="check" stylex="height: 36px;padding-top: 0px;" autocomplete="off">
4
5 <img src="{:captcha_src()}" onClick="this.src="{:captcha_src()}"" alt="captcha" stylex="height: 36px ;width: 110px;border: 1px solid #584C4D;vertical-align:middle" />
6
7 <br/><br/>
8 <input type="submit" value="提交">
9
10 </form>

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

控制器里處理驗證碼:

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

1 //獲取到post傳遞的驗證碼
2 //不區分大小寫
3 $checks=Request::instance()->post("check");
4
5 if(!captcha_check($checks)){
6 //驗證失敗
7 echo "驗證碼輸入錯誤";
8
9 }else{
10
11 echo "驗證碼輸入成功";
12 }

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

文件上傳

文件上傳,支持單文件和多文件,上傳的文件會自動保存在public下自動創建的目錄中,並返回一系列結果。

單文件:

1 <form action="{:url("xiao/xiao2")}" method="post" enctype="multipart/form-data">
2
3 <input type="file" name="filex1">
4 <input type="submit" value="東小東上傳">
5
6 </form>

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

1 <?php
2 namespace appindexcontroller;
3
4 class Xiao
5 {
6 public function xiao2(){
7
8 // 獲取表單上傳文件 ,filex1為表單填寫的名字
9 $filex = request()->file("filex1");
10
11
12 if($filex){
13
14 //獲取到上傳原文件的名字
15 echo $filex->getInfo()["name"];
16 echo "--<br/>";
17
18 //移動到/public/uploads/目錄下,DS表示根據系統確定的目錄分隔符"/"或「」
19 $info = $filex->move(ROOT_PATH . "public" . DS . "uploads");
20 if($info){
21
22 // 成功上傳後 獲取上傳信息
23 //文件的後綴
24 // 如輸出 jpg
25 echo $info->getExtension()."<br>";
26
27 //保存後的路徑
28 // 如輸出 20160820/42a79759f284b767dfcb2a0197904287.jpg
29 echo $info->getSaveName()."<br>";
30
31 //保存後的文件名
32 // 如輸出 42a79759f284b767dfcb2a0197904287.jpg
33 echo $info->getFilename()."<br>";
34
35 }else{
36
37 // 上傳失敗獲取錯誤信息
38 echo $filex->getError();
39
40 }
41 }}}

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

多文件:

實現是利用了數組的原理進行的,上傳時將文件內容保存到數組中,處理是通過數組的遍歷進行取存。利用數組進行多文件上傳,更具擴展性

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

1 <form action="http://localhost:8080/ATP5/public/index/xiao/xiao2" method="post" enctype="multipart/form-data">
2
3 <input type="file" name="filex1[]">
4 <br/>
5 <input type="file" name="filex1[]">
6 <br/>
7 <input type="file" name="filex1[]">
8 <br/>
9 <input type="submit" value="東小東上傳">
10 </form>

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

1 <?php
2 namespace appindexcontroller;
3
4 class Xiao
5 {
6 public function xiao2(){
7 // 獲取表單上傳文件 ,filex1為表單填寫的名字
8 $filess = request()->file("filex1");
9
10 //文件數組的遍歷
11 foreach($filess as $filex){
12
13
14 //移動方法1:按照系統規則實現文件保存
15 //$info = $filex->move(ROOT_PATH . "public" . DS . "uploads");
16
17 //移動方法2:保留原文件名,如果重名會覆蓋
18 $info=$filex->move(ROOT_PATH . "public" . DS . "uploads",iconv("utf-8","gbk",$filex->getInfo()["name"]));
19 if($info){
21
22 //保存後的路徑
23 // 如輸出 20160820/42a79759f284b767dfcb2a0197904287.jpg
24 echo $info->getSaveName()."<br>";
25
26
27 }else{
28
29 // 上傳失敗獲取錯誤信息
30 echo $filex->getError();
31 }
32 }
33 }}

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

圖片處理

圖片處理集成方法可以實現圖片信息的獲取、圖片的裁剪、圖片的壓縮、圖片上水印等,其操作的圖片目錄均為public目錄下,必須載入 use thinkImage;模塊

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)

1 <?php
2 namespace appindexcontroller;
3 use thinkRequest;
4 use thinkImage;
5 class Xiao
6 {
7 public function xiao2(){
8
9 //打開public目錄下的圖片
10 $image =Image::open("./rr.jpg");
11
12 //直接獲取到上傳的圖片文件內容
13 //$image =Image::open(request()->file("上傳的文件表單名"));
14
15 //-----------------獲取圖片信息------------
16
17 // 返回圖片的寬度
18 $width = $image->width();
19
20 // 返回圖片的高度
21 $height = $image->height();
22
23 // 返回圖片的類型,如jpeg
24 $type = $image->type();
25
26 // 返回圖片的mime類型,如:image/jpeg
27 $mime = $image->mime();
28
29 // 返回圖片的尺寸數組 0 圖片寬度 1 圖片高度
30 $size = $image->size();
31 dump($size) ;
32
33 //----------------------------------------
34
35 //--------------圖片處理-------------------
36
37 //裁剪
38 //更改的是原,無需賦值,且會迭代操作,如第二次裁剪會在第一次的基礎上進行
39
40 //從位置(0,0)裁剪(寬度,高度)並保存到public中
41 //$image->crop(100, 200)->save("./crop1.png");
42
43 //從位置(0,20)裁剪(寬度,高度)並保存到public中
44 //$image->crop(200, 100,0,20)->save("./crop2.png");
45
46 //壓縮
47 //等比例壓縮,如最大為150*150
48 //$image->thumb(150, 150)->save("./thumb1.png");
49
50 //等比例裁剪,如果不能到達標準150*150時,將進行圖片裁剪
51 /*
52 //常量,標識縮略圖居中裁剪類型
53 const THUMB_CENTER = 3;
54 //常量,標識縮略圖左上角裁剪類型
55 const THUMB_NORTHWEST = 4;
56 //常量,標識縮略圖右下角裁剪類型
57 const THUMB_SOUTHEAST = 5;
58 */
59 //$image->thumb(150,150,Image::THUMB_CENTER)->save("./thumb.png");
60
61 //為圖片上水印
62 /*
63 //常量,標識左上角水印
64 const WATER_NORTHWEST = 1;
65 //常量,標識上居中水印
66 const WATER_NORTH = 2;
67 //常量,標識右上角水印
68 const WATER_NORTHEAST = 3;
69 //常量,標識左居中水印
70 const WATER_WEST = 4;
71 //常量,標識居中水印
72 const WATER_CENTER = 5;
73 //常量,標識右居中水印
74 const WATER_EAST = 6;
75 //常量,標識左下角水印
76 const WATER_SOUTHWEST = 7;
77 //常量,標識下居中水印
78 const WATER_SOUTH = 8;
79 //常量,標識右下角水印
80 const WATER_SOUTHEAST = 9;
81 */
82 //圖片水印
83 //參數1為水印圖片地址,參數2為水印位置,參數3為透明度[0,100],100為原圖
84 $image->water("./thumb.png",Image::WATER_NORTHWEST,10)->save("img/water_image.png");
85
86 //文字水印
87 //參數(文字內容,文字字體,大小,RGB,位置,相對位置偏移量,旋轉)
88 $image->text("東小東","font/tt.ttf",30,"#ff00ff",Image::WATER_SOUTHEAST,-20)->save("img/text_image1.png");
89
90 }
91 }

PHP之ThinkPHP框架(驗證碼、文件上傳、圖片處理)



作者:東小東

原文:https://www.cnblogs.com/dongxiaodong/p/10270168.html

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

react+react-router+mobx+element打造管理後台系統
阻塞IO、非阻塞IO和非同步IO

TAG:程序員小新人學習 |