十一、SESSION和COOKIE
1.session
配置文件配置session的前缀、驱动方式(存储类型)、是否开启
session => [
'prefix' => 'think', // 前缀
'type' => '', // 驱动方式 支持redis memcache memcached
'auto_start' => true, // 是否自动开启 SESSION
],
命名空间:use think\Session
相关方法:
Session::set() //赋值,参数一:键;参数二:值;参数三:作用域(可选,默认当前作用域)
Session::has() //判断是否赋值
Session::get() //取值,不存在时返回null
Session::prefix() //指定当前作用域
Session::delete() //删除值
Session::clear() //清除session
助手函数:session()
session(‘键’,‘值’):赋值
session(’?键’):判断是否赋值
session(‘键’):取值
session(null):清除
页面渲染:{$Request.session.键}
2.cookie
配置文件配置cookie
'cookie' => [
'prefix' => 'think', // 前缀
'expire' => 0 // 保存时间
'path' => '/' // 保存路径
'domain' => '' // 有效域名
'secure' => false // 是否启用安全传输
'httponly' => '' //httponly设置
'setcookie' => true // 是否使用 setcookie
],
命名空间:use think\Cookie
Cookie::set(‘键’,‘值’,[‘前缀’,‘有效期’]) //赋值[指定前缀,有效期]
Cookie::get(‘键’,[‘前缀’]) //获取[指定前缀的]值
Cookie::has(‘键’,[‘前缀’]) //判断[指定前缀的]是否赋值
Cookie::delete(‘键’,[‘前缀’]) //删除[指定前缀的]cookie
Cookie::clear(‘前缀’) //清空指定前缀的cookie,无前缀时不能清空
Cookie::forever()//永久保存cookie
十二、分页
1.使用方法:
$list = Db::name('user')->where('status',1)->paginate(10);
paginate方法:paginate($listRows,$simple,$config)
参数:$listRows:每页数量。数组表示配置参数。
$simple:是否简洁模式或者总记录数。如果为true,则为简洁模式,只有上一页和下一页。
$config:配置参数。具体可以自己传入或在配置文件中配置。
$config 参数具体配置
参数 | 描述 |
---|---|
list_rows | 每页数量 |
page | 当前页 |
path | url路径 |
query | url额外参数 |
fragment | url锚点 |
var_page | 分页变量 |
type | 分页类名 |
2.模板渲染
{volist name='list' id='user'}
{$user.nickname}
{/volist}
{$list->render()}
十三、验证码
1.下载安装类库
thinkphp\vendor\topthink\think-capcha
2.验证码配置
$config = [
'seKey' => 'ThinkPHP.CN', // 验证码加密密钥
'codeSet' => '数组字母', // 验证码字符集合
'expire' => 1800, // 验证码过期时间(s)
'useZh' => false, // 使用中文验证码
'zhSet' => '一大堆中文', // 中文验证码字符串
'useImgBg' => false, // 使用背景图片
'fontSize' => 25, // 验证码字体大小(px)
'useCurve' => true, // 是否画混淆曲线
'useNoise' => true, // 是否添加杂点
'imageH' => 0, // 验证码图片高度
'imageW' => 0, // 验证码图片宽度
'length' => 5, // 验证码位数
'fontttf' => '', // 验证码字体,不设置随机获取
'bg' => [243, 251, 254], // 背景颜色
'reset' => true, // 验证成功后是否重置
];
3.模板中显示
<div>{:captcha_img()}div>
或
<div><img src="{:captcha_src()}" alt="captcha" />div>
4.验证码检测
(1)助手函数:
captcha_check($code)
(2)
$captcha = new Captcha();
if (!$captcha->check(input($code))){
return $this->error("验证码错误");
}
十四、文件上传
1.表单代码
<form action="/index/index/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image" /> <br>
<input type="submit" value="上传" />
</form>
2.后台方法
public function upload(){
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('image');
// 移动到框架应用根目录/uploads/ 目录下
$info = $file->validate(['size'=>15678,'ext'=>'jpg,png,gif'])
->rule('md5')
->move( '../uploads');
if($info){
// 成功上传后,获取上传信息
echo $info->getExtension(); //返回原图名称的图片地址
echo $info->getSaveName(); //返回含有目录的被加密的图片地址
echo $info->getFilename(); //返回不含有目录的被加密的图片地址
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
(1)validate()方法:对上传文件的验证,包括文件大小、后缀。如果上传文件验证不通过,则move方法返回false。
size | 上传文件的最大字节 |
---|---|
ext | 文件后缀,多个用逗号分割或者数组 |
(2)rule()方法:上传的文件按照一定规则生成文件名。
date | 根据日期和微秒数生成 |
---|---|
md5 | 对文件使用md5_file散列生成 |
sha1 | 对文件使用sha1_file散列生成 |
十五、图片处理
1.获取图像文件
$image = \think\Image::open('./image.png');
或
$image = \think\Image::open(request()->file('image'));
2.获取图像信息
$image = \think\Image::open('./image.png');
$width = $image->width(); // 返回图片的宽度
$height = $image->height(); // 返回图片的高度
$type = $image->type(); // 返回图片的类型
$mime = $image->mime(); // 返回图片的mime类型
$size = $image->size(); // 返回图片的尺寸数组。0:图片宽度,1:图片高度
(1)裁剪图
crop(长,宽[,坐标x,坐标y])方法:裁剪图片,和save()方法配合使用。
//将图片裁剪为300x300并保存为crop.png
$image->crop(300, 300)->save('./crop.png');
save()方法:保存图像。
pathname | 必填项 | 图像保存路径名称 |
---|---|---|
type | 默认与原图相同 | 图像类型 |
quality | 80 | 图像质量 |
interlace | true | 是否对JPEG类型图像设置隔行扫描 |
(2)缩略图
thumb(长,宽[,常量])方法:生成缩略图
// 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.png
$image->thumb(150,150,\think\Image::THUMB_CENTER)->save('./thumb.png');
常量 | 含义 | 值 |
---|---|---|
THUMB_SCALING | 等比例缩放 | 1 |
THUMB_FILLED | 缩放后填充 | 2 |
THUMB_CENTER | 居中裁剪 | 3 |
THUMB_NORTHWEST | 左上角裁剪 | 4 |
THUMB_SOUTHEAST | 右下角裁剪 | 5 |
THUMB_FIXED | 固定尺寸缩放 | 6 |
(3)图像翻转
flip()方法:对图像进行翻转,默认是X轴;传入参数\think\image::FLIP_Y,则以Y轴翻转。
// 对图像进行以x轴进行翻转操作
$image->flip()->save('./filp_image.png');
(4)图像旋转
rotate()方法:对图像进行旋转,默认是顺时针旋转90度。
// 对图像使用默认的顺时针旋转90度操作
$image->rotate()->save('./rotate_image.png');
(5)添加水印
a.图片水印
water(水印图片[,水印位置,透明度])方法:添加图片水印。
常量 | 位置 | 值 |
---|---|---|
WATER_NORTHWEST | 左上角 | 1 |
WATER_NORTH | 上居中 | 2 |
WATER_NORTHEAST | 右上角 | 3 |
WATER_WEST | 左居中 | 4 |
WATER_CENTER | 居中 | 5 |
WATER_EAST | 右居中 | 6 |
WATER_SOUTHWEST | 左下角 | 7 |
WATER_SOUTH | 下居中 | 8 |
WATER_SOUTHEAST | 右下角 | 9 |
// 给原图左上角添加透明度为50的水印并保存alpha_image.png
$image->water('./logo.png',\think\Image::WATER_NORTHWEST,50)->save('alpha_image.png');
b.文字水印
text()方法:添加文字水印,需要放置一个字体文件到入口目录中。
text | 不能为空 | 添加的文字 |
---|---|---|
font | 不能为空 | 字体文件路径 |
size | 不能为空 | 字号,单位是像素 |
color | #00000000 | 文字颜色 |
locate | WATER_SOUTHEAST | 文字写入位置 |
offset | 0 | 文字相对当前位置的偏移量 |
angle | 0 | 文字倾斜角度 |
// 给原图左上角添加水印并保存water_image.png
$image->text('文字','字体文件',20,'#ffffff')->save('text_image.png');