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

 驗證碼

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

簡單的顯示:數組

 1 <form action="{:url('index/ii')}" method="post">
 2 
 3    <!--驗證碼顯示方法1--> 
 4    <img src="{:captcha_src()}" alt="captcha" style="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>

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

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

控制器裏處理驗證碼:框架

 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     }

 

文件上傳

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

單文件:post

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>
 1 <?php
 2 namespace app\index\controller;
 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 }}}

多文件:字體

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

 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>
 1 <?php
 2 namespace app\index\controller;
 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 }}

 

圖片處理

圖片處理集成方法能夠實現圖片信息的獲取、圖片的裁剪、圖片的壓縮、圖片上水印等,其操做的圖片目錄均爲public目錄下,必須加載 use think\Image;模塊url

 1 <?php
 2 namespace app\index\controller;
 3 use think\Request;
 4 use think\Image;
 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 }
相關文章
相關標籤/搜索