zoukankan      html  css  js  c++  java
  • PHP之ThinkPHP框架(验证码、文件上传、图片处理)

     验证码

    验证码是框架自带有的,比之前使用GD库简单方便许多,其实现原理基本相似,都是生成图片,保存验证码值到Session中,表单提交验证码,然后进行值的对比验证。

    简单的显示:

     1 <form action="{:url('index/ii')}" method="post">
     2 
     3    <!--验证码显示方法1--> 
     4    <img src="{:captcha_src()}" alt="captcha" style="height: 80px ; 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>

    实现点击验证码进行切换:

     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 ; 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下自动创建的目录中,并返回一系列结果。

    单文件:

    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 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 }}}

    多文件:

    实现是利用了数组的原理进行的,上传时将文件内容保存到数组中,处理是通过数组的遍历进行取存。利用数组进行多文件上传,更具扩展性

     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 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 }}

    图片处理

    图片处理集成方法可以实现图片信息的获取、图片的裁剪、图片的压缩、图片上水印等,其操作的图片目录均为public目录下,必须加载 use thinkImage;模块

     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 }

  • 相关阅读:
    HDU 1847
    HDU 1717
    KMP未优化模板、
    Codeforces Round #340 (Div. 2) B. Chocolate
    HDU 1042 N!
    HDU 1018 Big Number
    HDU 1031 Design T-Shirt
    解决Windows 7删除执行过的 EXE、Bat文件有延迟的问题
    修改Android手机的“虚拟机堆大小”和android:largeHeap来防止APP内存溢出问题
    Android引用百度定位API第三方组件后导致其它.so文件无法正常加载的问题
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/10270168.html
Copyright © 2011-2022 走看看