验证码

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

简单的显示:

 <form action="{:url('index/ii')}" method="post">

    <!--验证码显示方法1-->
<img src="{:captcha_src()}" alt="captcha" style="height: 80px ;width: 200px" /> <br/> <!--验证码显示方法2-->
<div>{:captcha_img()}</div> <br/> 请输入验证码:<input type="text" name="check"> <br/> <input type="submit" value="提交"> </form>

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

 <form action="{:url('index/ii')}" method="post">

    <input type="text" name="check" style="height: 36px;padding-top: 0px;" autocomplete="off">  

    <img src="{:captcha_src()}" onClick="this.src='{:captcha_src()}'"  alt="captcha"  style="height: 36px ;width: 110px;border: 1px solid #584C4D;vertical-align:middle" />

    <br/><br/>
<input type="submit" value="提交"> </form>

控制器里处理验证码:

     //获取到post传递的验证码
//不区分大小写
$checks=Request::instance()->post("check"); if(!captcha_check($checks)){
//验证失败
echo "验证码输入错误"; }else{ echo "验证码输入成功";
}

文件上传

文件上传,支持单文件和多文件,上传的文件会自动保存在public下自动创建的目录中,并返回一系列结果。

单文件:

 <form action="{:url('xiao/xiao2')}" method="post" enctype="multipart/form-data">

   <input type="file" name="filex1">
<input type="submit" value="东小东上传"> </form>
 <?php
namespace app\index\controller; class Xiao
{
public function xiao2(){ // 获取表单上传文件 ,filex1为表单填写的名字
$filex = request()->file("filex1"); if($filex){ //获取到上传原文件的名字
echo $filex->getInfo()["name"];
echo "--<br/>"; //移动到/public/uploads/目录下,DS表示根据系统确定的目录分隔符"/"或“\”
$info = $filex->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){ // 成功上传后 获取上传信息
//文件的后缀
// 如输出 jpg
echo $info->getExtension()."<br>"; //保存后的路径
// 如输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
echo $info->getSaveName()."<br>"; //保存后的文件名
// 如输出 42a79759f284b767dfcb2a0197904287.jpg
echo $info->getFilename()."<br>"; 35 }else{ // 上传失败获取错误信息
echo $filex->getError(); }
}}}

多文件:

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

 <form action="http://localhost:8080/ATP5/public/index/xiao/xiao2" method="post" enctype="multipart/form-data">

      <input type="file" name="filex1[]">
<br/>
<input type="file" name="filex1[]">
<br/>
<input type="file" name="filex1[]">
<br/>
<input type="submit" value="东小东上传">
</form>
 <?php
namespace app\index\controller; class Xiao
{
public function xiao2(){
// 获取表单上传文件 ,filex1为表单填写的名字
$filess = request()->file("filex1"); //文件数组的遍历
foreach($filess as $filex){ //移动方法1:按照系统规则实现文件保存
//$info = $filex->move(ROOT_PATH . 'public' . DS . 'uploads'); //移动方法2:保留原文件名,如果重名会覆盖
$info=$filex->move(ROOT_PATH . 'public' . DS . 'uploads',iconv("utf-8","gbk",$filex->getInfo()["name"]));
if($info){ //保存后的路径
// 如输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
echo $info->getSaveName()."<br>"; }else{ // 上传失败获取错误信息
echo $filex->getError();
}
}
}}

图片处理

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

 <?php
namespace app\index\controller;
use think\Request;
use think\Image;
class Xiao
{
public function xiao2(){ //打开public目录下的图片
$image =Image::open('./rr.jpg'); //直接获取到上传的图片文件内容
//$image =Image::open(request()->file('上传的文件表单名')); //-----------------获取图片信息------------ // 返回图片的宽度
$width = $image->width(); // 返回图片的高度
$height = $image->height(); // 返回图片的类型,如jpeg
$type = $image->type(); // 返回图片的mime类型,如:image/jpeg
$mime = $image->mime(); // 返回图片的尺寸数组 0 图片宽度 1 图片高度
$size = $image->size();
dump($size) ; //---------------------------------------- //--------------图片处理------------------- //裁剪
//更改的是原,无需赋值,且会迭代操作,如第二次裁剪会在第一次的基础上进行 //从位置(0,0)裁剪(宽度,高度)并保存到public中
//$image->crop(100, 200)->save('./crop1.png'); //从位置(0,20)裁剪(宽度,高度)并保存到public中
//$image->crop(200, 100,0,20)->save('./crop2.png'); //压缩
//等比例压缩,如最大为150*150
//$image->thumb(150, 150)->save('./thumb1.png'); //等比例裁剪,如果不能到达标准150*150时,将进行图片裁剪
/*
//常量,标识缩略图居中裁剪类型
const THUMB_CENTER = 3;
//常量,标识缩略图左上角裁剪类型
const THUMB_NORTHWEST = 4;
//常量,标识缩略图右下角裁剪类型
const THUMB_SOUTHEAST = 5;
*/
//$image->thumb(150,150,Image::THUMB_CENTER)->save('./thumb.png'); //为图片上水印
/*
//常量,标识左上角水印
const WATER_NORTHWEST = 1;
//常量,标识上居中水印
const WATER_NORTH = 2;
//常量,标识右上角水印
const WATER_NORTHEAST = 3;
//常量,标识左居中水印
const WATER_WEST = 4;
//常量,标识居中水印
const WATER_CENTER = 5;
//常量,标识右居中水印
const WATER_EAST = 6;
//常量,标识左下角水印
const WATER_SOUTHWEST = 7;
//常量,标识下居中水印
const WATER_SOUTH = 8;
//常量,标识右下角水印
const WATER_SOUTHEAST = 9;
*/
//图片水印
//参数1为水印图片地址,参数2为水印位置,参数3为透明度[0,100],100为原图
$image->water('./thumb.png',Image::WATER_NORTHWEST,10)->save('img/water_image.png'); //文字水印
//参数(文字内容,文字字体,大小,RGB,位置,相对位置偏移量,旋转)
$image->text('东小东','font/tt.ttf',30,'#ff00ff',Image::WATER_SOUTHEAST,-20)->save('img/text_image1.png'); }
}

PHP之ThinkPHP框架(验证码、文件上传、图片处理)的更多相关文章

  1. jersey框架实现文件上传

    jersey框架是一个开源的RESTful的框架,实现了实现了JAX-RS规范,进一步地简化 RESTful service 和 client 开发.当然而且是必须的,jersey对文件的上传和下载也 ...

  2. layUI框架中文件上传前后端交互及遇到的相关问题

    下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题: 前端jsp页面: <div class="layui-form-item"> <label cla ...

  3. 使用SpringMVC框架实现文件上传和下载功能

    使用SpringMVC框架实现文件上传和下载功能 (一)单个文件上传 ①配置文件上传解释器 <!—配置文件上传解释器 --> <mvc:annotation-driven>&l ...

  4. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  5. 关于我使用spring mvc框架做文件上传时遇到的问题

    非常感谢作者 原文:https://blog.csdn.net/lingirl/article/details/1714806 昨天尝试着用spring mvc框架做文件上传,犯了挺多不该犯的毛病问题 ...

  6. SpringMVC框架06——文件上传与下载

    1.文件上传 Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现. ...

  7. 笨鸟先飞之Java(一)--使用struts2框架实现文件上传

    无论是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个经常使用功能会有非常多种解决方案,可是struts2的框架却能给我们一个比較简单的方式,以下就一起来看吧: ...

  8. 第三百一十九节,Django框架,文件上传

    第三百一十九节,Django框架,文件上传 1.自定义上传[推荐] 请求对象.FILES.get()获取上传文件的对象上传对象.name获取上传文件名称上传对象.chunks()获取上传数据包,字节码 ...

  9. Android(java)学习笔记214:开源框架的文件上传(只能使用Post)

    1.文件上传给服务器,服务器端必然要写代码进行支持,如下: 我们新建一个FileUpload.jsp的动态网页,同时我们上传文件只能使用post方式(不可能将上传数据拼凑在url路径下),上传数据Ap ...

  10. Struts 框架 之 文件上传下载案例

    Struts 框架 文件上传 1. 先准备 Struts 环境 (我使用的是struts 2.3.4版本) 导jar包:

随机推荐

  1. 如何配置nginx屏蔽恶意域名解析指向《包含隐藏nginx版本号》

    恶意域名指向: 比如,有一个垃圾域名将解析指向到了你们服务器的IP,一般多一个解析可能不会有什么问题,但是现在全民备案时期,可能你的运营商会联系你,说你们的域名没备案,可能会封你们的80端口,然后会导 ...

  2. 洛谷P1576||最小花费||dijkstra||双向建边!!

    题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元. 数据范 ...

  3. Numpy 线性代数

    Numpy 提供了线性代数库 linalg , 该库包含了线性代数所需的所有功能,可以看卡下面的说明: 函数 描述 dot 两个数组的点积, 即元素对应相乘 vdot 两个向量的点积 inner 两个 ...

  4. Java中的4个并发工具类 CountDownLatch CyclicBarrier Semaphore Exchanger

    在 java.util.concurrent 包中提供了 4 个有用的并发工具类 CountDownLatch 允许一个或多个线程等待其他线程完成操作,课题点 Thread 类的 join() 方法 ...

  5. spring Resource(转)

    http://blog.csdn.net/u011225629/article/details/47143075

  6. [c#.net]遍历一个对象中所有的属性和值

    利用反射 SpDictItem sp = GetCFHObject.GetSpItem("); PropertyInfo[] propertys = sp.GetType().GetProp ...

  7. echarts使用踩坑实录之气泡图

    最近想做一个统计文章点击率,评论率和点赞率的功能,听说echarts可以轻易完成它,于是我就选择使用echarts,考虑到我做的模块上文章是没有分类的,所以我的统计是基于一个个点,这一看嘛,感觉散点图 ...

  8. SAS 操作数据集的观测

    SAS  操作数据集的观测 1. SAS表达式 表达式是操作数和操作符的序列,该序列会形成一组可执行并产生 结果值的指令.其中,操作数可以是常量.变量或表达式:操作符是表 示比较.数学计算或逻辑运算的 ...

  9. WinDbg分析Dump常用方法和命令

    记录下自己使用WinDbg分析Dump时常用的一些方法和命令 !analyze -v //找出出错的堆 .exrc //找到程序崩溃的位置 !heap //打印出错函数的局部位置 !for_each_ ...

  10. @RequestParam与@PathVariable

    @PathVariable 带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义 通过 @PathVariable 可以 ...