ThinkPHP

thinphp5-image图片处理类库压缩图片

感情迁移 提交于 2021-01-05 03:03:50
使用tp5的thinkphp-image类库处理图片 使用方法手册都有,为了增加印象我自己记录一下 手册:https://www.kancloud.cn/manual/thinkphp5/177530 我的需求是在app的管理后台上传压缩的图片 //图片压缩上传 public function upload() { $file = $this->request->file('file'); // 移动路径 $upload_path = 'public/uploads/'; //缩略保存路径 $save_path = 'public/uploads/'; //移动至 $upload_path $info = $file->validate(['ext' => 'jpg,gif,png,bmp,jpeg,JPG'])->move($upload_path); //打开移动的图片 $image = \think\Image::open($save_path.$info->getSaveName()); //压缩图片 $image->thumb(200, 200)->save($save_path.$info->getSaveName()); if($info){ $result['code'] = 1; $result['info'] = '图片上传成功!'; $path=str

ThinkPHP6.0任意文件创建Getshell复现

我怕爱的太早我们不能终老 提交于 2020-12-19 15:42:52
本公众号专注于最新漏洞复现,欢迎关注! ------------------------------------------------------------------------------------ 本文作者:shiyi(Timeline Sec团队成员) 本文共1082字,阅读大约需要3~4分钟 声明:请勿做非法用途,否则后果自负 0x01 简介 ThinkPHP框架是MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。该漏洞源于ThinkPHP 6.0的某个逻辑漏洞,成功利用此漏洞的攻击者可以实现“任意”文件创建,在特殊场景下可能会导致GetShell。 0x02 漏洞概述 2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。 0x03 影响版本 ThinkPHP 6.0.0-6.0.1 0x04 环境搭建 1、安装Composer 下载Composer-Setup.exe https://getcomposer.org/download/ 执行安装文件,选择php.exe位置,即可安装成功

ThinkPHP面试题(最全干货!!!)

戏子无情 提交于 2020-12-19 11:02:03
面试背景 先说说thinkphp面试的背景,一般来说tp是大部分小白上手的框架,简易,入手快,开发快,所以一般面试官在考你tp内容的同时一定会问到你一些基础性的内容,那么下面就是我准备的一些基础和tp面试题: 1、HTTP状态码 点击这儿查看HTTP状态码详解 常见的HTTP状态码: 200 - 请求成功 301 - 资源(网页等)被永久转义到其他URL 404 - 请求的资源(网页等)不存在 505 - 内部服务器错误 HTTP状态码分类: 1** - 信息,服务器收到的请求,需要请求者继续执行操作 2** - 成功,操作被成功接收并处理 3** - 重定向,需要进一步的操作以完成请求 4** - 客户端错误,请求包含语法错误或者无法完成请求 5** 服务器错误,服务器在处理请求的过程 中发生了错误 2、什么是魔术引号 魔术引号是一个将自动将进入PHP脚本的数据进行转义的过程,最好在编码时不要转义而在运行时根据需要而转义 3、说明php中传值与传引用的区别,并说明传值什么时候传引用? 变量默认总是传值赋值,那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量,这意味着:当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量 4、语句include和require的区别是什么?为避免多次包含同一文件,可以用(?)语句代替他们

Thinkphp5后台获取栏目、热门文章、热门标签、随机文章实现代码

随声附和 提交于 2020-12-15 23:56:43
public function _initialize(){ //1.取出所有栏目 $cates=db('cate')->order('id desc')->select(); $this ->assign('cates',$cates); //2.热门文章 $hot=db('article')->order('click desc')->limit(5)->select(); $this ->assign('hot',$hot); //3.热门标签 $tags=db('tags')->order('id desc')->limit(10)->select(); $this ->assign('tags',$tags); //4.随机取文章 $list = db('article') ->select(); //获取数据集,可以根据自己的实际情况决定是否需要limit。当数据较多时,这个方法效率就会变的很差。 shuffle($list); //打乱数组 $randart = array_slice($list,0,5); //抽取数据 $this ->assign('randart',$randart); } 来源: oschina 链接: https://my.oschina.net/u/4213769/blog/4809057

Tinkphp彩色标签Tags的实现方法

谁都会走 提交于 2020-12-06 02:38:20
我们浏览网页时经常看到眩目的彩色标签,而且每刷新一下浏览器,都会更新为不同的颜,是不是很“惊艳”?现在来看一下它在 Thinkphp 上的现实方法。 项目函数库的位置:项目\Common\common.php 项目函数库加入以下处理函数 1 functionrcolor() { 2 $rand= rand(0,255);//随机获取0--255的数字 3 returnsprintf("%02X","$rand");//输出十六进制的两个大写字母 4 } 5 functionrand_color(){ 6 return'#'.rcolor().rcolor().rcolor();//六个字母 7 } 在控制器加入获取标签列表的方法 //标签控制器查询标签表以获取标签列表 functionTags($Module) { $Tag= M('Tag'); 4 $map['module']=$Module; 5 $Tagslist=$Tag->where($map)->field('id,name,count')->order('count desc')->limit('0,25')->select(); 6 $this->assign('tags',$Tagslist); 7 $this->display(); 8 9 } 把标签列表输出在模板上 1 <volistid="vo"name=

ThinkPHP5入门(四)----模板篇

独自空忆成欢 提交于 2020-12-04 11:31:08
一、模板访问 1、没有参数传递 $view = new View(); return $view ->fetch(); 此时默认访问的模板路径为: [模板文件目录]/当前控制器名(小写+下划线)/当前操作名(小写).html 2、指定模板(跨模板) $view = new View(); return $view ->fetch('add'); 此时访问的模板路径为: [模板文件目录]/当前控制器名(小写+下划线)/add.html 3、指定某个控制器的某个模板(跨控制器) $view = new View(); return $view ->fetch('user/add'); 此时访问的模板路径为: [模板文件目录]/user/add.html 4、指定某个模块的某个控制器的某个模板(跨模块) $view = new View(); return $view ->fetch('admin@user/add'); 5、全路径模板调用 $view = new View(); return $view ->fetch(APP_PATH.request()->module().'/view/public/header.html'); 二、模板继承 1、定义基础模板 (基础模板路径: mypro/application/index/view/index/base.html )

thinkphp5如何在视图中引用公共模板和跨模块引用

情到浓时终转凉″ 提交于 2020-12-04 10:51:36
我们有时候在开发项目的时候头部和尾部都是一样的,所以完全可以写一个模板,然后在每一个页面调用,如下 在视图(view)目录下创建public公共文件夹,然后创建头部文件header.html或尾部footer.html等像这样的静态模板文件。然后将主页面的头部代码和尾部代码分别分离到相应的文件里。 { include file = "public/header" / } 代表引用的是同view下的public文件夹下的公共头部和尾部 如果是要跨模块引用模板的话,不同模块共用一个header.htm文件,现在header.htm默认的home组里,在user组里如何引用这个模板的 { include file = "home@public/header" / } //{include file="模块名@模板路径" /} 来源: oschina 链接: https://my.oschina.net/u/3221950/blog/4773737

ThinkCMF 高危漏洞分析与利用

女生的网名这么多〃 提交于 2020-12-04 08:25:38
作者:深信服千里目实验室 原文链接: https://mp.weixin.qq.com/s/9IWS0VX90CUJzhh8i0myAw 一、组件介绍 1.1 基本信息 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架。ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的需求以应用的形式进行扩展。每个应用都能独立的完成自己的任务,也可通过系统调用其他应用进行协同工作。在这种运行机制下,该系统的用户无需关心开发SNS应用是如何工作的,但他们之间又可通过系统本身进行协调,大大的降低了开发成本和沟通成本。 普通的CMS(内容管理系统)一般不能完成所有的需求,而因为CMS在ThinkCMF内部只是一个应用的形式存在,所以使用ThinkCMF可以用CMS来管理内容,用电影网站系统来管理视频,用电商系统来管理电商网站。这些程序不会影响,也可以模块化的增加或减少应用。 ThinkCMF自身层次非常清晰,逻辑也相当的严谨,特别是系统自带的protal应用非常适合PHP初学者使用。采用了国内优秀的开源php框架ThinkPHP使得ThinkCMF具备了优秀的性能以及良好的安全性。 1.2 版本介绍 ThinkCMF基于ThinkPHP框架进行了二次开发,经过逐年演化,逐渐成为了一款功能齐全的内容管理框架。ThinkCMF发展至今已有近8年历史

Thinkphp5实现管理员增删改查(CRUD)

会有一股神秘感。 提交于 2020-12-02 00:50:20
一、管理员添加 /*** * 添加管理员 */ public function add( Request $request){ //判断提交类型 if($request->IsPost()){ //接收数据 $data=[ 'username'=>input('username'), 'password'=>input('password') ]; //后台验证提交数据合法性 $validate= Loader ::validate('admin'); if(!$validate->scene('add')->check($data)){ $this ->error($validate->getError());die(); } $data['password']=md5($data['password']); $res=db('admin')->insert($data); if($res){ return $this ->success('插入数据成功!','lst'); }else{ return $this ->error('插入数据失败!'); } } return $this ->fetch(); 二、分页显示管理员列表信息 /*** * 管理员列表 */ public function lst(){ $result=db('admin')->order('id',

ThinkPHP6项目基操(3.控制器获取请求参数)

纵饮孤独 提交于 2020-12-01 13:53:33
控制器获取请求参数 一、新建 Demo 控制器 二、获取参数的方法 一、新建 Demo 控制器 <?php namespace app \ controller ; use app \ BaseController ; class Demo extends BaseController { public function request ( ) { dump ( $this - > request - > param ( ) ) ; } } 浏览器访问: 获取单个参数: $this->request->param('a') ; 默认值: $this->request->param('a',1) ; 转换为整数: $this->request->param('a',1,'intval') ; 二、获取参数的方法 如上提到的 $this->request->param() ;(需继承 BaseController ) 根据请求类型获取,如果是get请求,可以使用: $this->request->get() ,结果同上(需继承 BaseController ); 如果没有继承 BaseController ,可以使用方法依赖注 app\Request 对象 public function request ( Request $request ) { dump ( $request -