升级核心6.0.7,添加数据库备份

This commit is contained in:
taoser 2021-01-30 17:47:18 +08:00
parent 7345e3b6b5
commit 79e07acc0b
280 changed files with 4252 additions and 871 deletions

View File

@ -0,0 +1,102 @@
<?php
namespace app\admin\controller;
use app\common\controller\AdminController;
use think\facade\Request;
use think\facade\View;
use think\facade\Config;
use phpspirit\databackup\BackupFactory;
use taoler\com\Files;
class Database extends AdminController
{
public function __construct()
{
$this->hostname = Config::get('database.connections.mysql.hostname');
$this->hostport = Config::get('database.connections.mysql.hostport');
$this->database = Config::get('database.connections.mysql.database');
$this->username = Config::get('database.connections.mysql.username');
$this->password = Config::get('database.connections.mysql.password');
}
public function index()
{
if(Request::isAjax()){
$backName = Files::getDirName('../data');
$res['count'] = count($backName);
if($res['count']){
$res['code'] = 0;
$res['msg'] = '';
$res['data'] = [];
foreach($backName as $k=>$v){
$res['data'][] = ['id' => $k,
'time' => $v,
'name' => $v,
];
}
} else {
return json(['code'=>-1,'msg'=>'还没有数据']);
}
return json($res);
}
return View::fetch();
}
public function backup()
{
//halt(app()->getRootPath());
//自行判断文件夹
$backupdir = '../data';
if (isset($_POST['backdir']) && $_POST['backdir'] != '') {
$backupdir = $_POST['backdir'];
} else {
$backupdir = app()->getRootPath() .'data/'. date('Ymdhis');
//halt($backupdir);
}
if (!is_dir($backupdir)) {
mkdir($backupdir, 0777, true);
}
$backup = BackupFactory::instance('mysql', "$this->hostname:$this->hostport", $this->database, $this->username, $this->password);
$result = $backup->setbackdir($backupdir)
->setvolsize(0.2)
->setonlystructure(false) //设置是否只备份目录结构
->settablelist() //设置要备份的表, 默认全部表
->setstructuretable()
->ajaxbackup($_POST);
echo json_encode($result);
}
//下载
public function down()
{
$id = input('id');
var_dump($id);
}
//删除备份文件夹
public function delete()
{
$name = input('name');
//var_dump($name);
$dir = app()->getRootPath() .'data/'.$name;
$res = Files::delDir($dir);
if($res){
return json(['code'=>0,'msg'=>'删除成功']);
} else {
return json(['code'=>-1,'msg'=>'删除失败']);
}
}
}

View File

@ -3,4 +3,5 @@
return [
app\middleware\Auth::class,
//'logedcheck' => \app\middleware\logedCheck::class,
app\middleware\AdminLoginCookie::class,
];

View File

@ -5,6 +5,9 @@ namespace app\admin\model;
use think\Model;
use think\facade\Db;
use think\facade\Session;
use app\oil\model\Station;
use think\facade\Cookie;
use think\facade\Config;
use think\model\concern\SoftDelete;
class Admin extends Model
@ -21,6 +24,11 @@ class Admin extends Model
return $this->belongsTo('AuthGroup','auth_group_id','id');
}
*/
//管理员关联站点
public function station()
{
return $this->belongsTo(Station::class);
}
//远程一对多管理员关联角色
public function adminGroup()
@ -30,12 +38,12 @@ class Admin extends Model
//管理员关联角色分配表
public function authGroupAccess()
{
return $this->hasMany('AuthGroupAccess','uid','id');
return $this->hasMany(AuthGroupAccess::class,'uid');
}
//登陆校验
public function login($data)
{
{
//查询用户
$admin = Db::name('admin')->where('username',$data['username'])->where('delete_time',0)->find();
@ -51,13 +59,20 @@ class Admin extends Model
//将用户数据写入Session
Session::set('admin_id',$admin['id']);
Session::set('admin_name',$admin['username']);
if(isset($data['remember'])){
$salt = Config::get('taoler.salt');
//加密auth存入cookie
$auth = md5($admin['username'].$salt).":".$admin['id'];
Cookie::set('adminAuth',$auth,604800);
}
Db::name('admin')->where('id',$admin['id'])->update(
[
'last_login_time' => time(),
'last_login_ip' => request()->ip(),
]
);
);
//用户名密码正确返回1
return 1;

View File

@ -0,0 +1,218 @@
{extend name="public:base" /}
{block name="body"}
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-header layuiadmin-card-header-auto">
<button class="layui-btn layuiadmin-btn-database" data-type="back">备份</button>
</div>
<div class="layui-progress layui-progress-big" lay-showpercent="true" lay-filter="demo">
<div class="layui-progress-bar layui-bg-red" lay-percent="0%"></div>
</div>
<div class="layui-card-body">
<table id="LAY-app-content-database" lay-filter="LAY-app-content-database"></table>
<script type="text/html" id="toolbarDemo">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
<button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
<button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
</div>
</script>
<script type="text/html" id="tao-database">
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="down"><i class="layui-icon layui-icon-edit"></i>下载</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-edit"></i>删除</a>
</script>
</div>
</div>
</div>
{/block}
{block name="js"}
<script>
layui.config({
base: '/static/admin/' //静态资源所在路径
}).extend({
index: 'lib/index' //主入口模块
}).use(['index','table','layer','element'], function(){
var table = layui.table,
layer = layui.layer,
element = layui.element;
var $ = layui.$;
var active = {
back: function backup(predate)
{
var index = layer.load();
$.ajax({
url: "{:url('admin/Database/backup')}",
type: 'POST', //POST
async: true, //或false,是否异步
dataType: 'json',
data:predate,
success: function (data, textStatus, jqXHR) {
if (data.totalpercentage >= 100)
{
//关闭
layer.close(index);
layer.alert('备份完成', {icon: 1});
table.reload('LAY-app-content-database'); //数据刷新
}
element.progress('demo', data.totalpercentage+'%');
//循环备份
if (data.totalpercentage < 100)
{
backup(data);
}
}
});
}
};
//总帐信息
table.render({
elem: '#LAY-app-content-database'
,url: "{:url('admin/Database/index')}" //进列表接口
,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
,cols: [[
{type: 'checkbox', fixed: 'left'}
,{field:'id', title:'ID', width:80, fixed: 'left', unresize: true, sort: true}
,{field: 'time', title: '备份时间',width: 180}
,{field: 'name', title: '备份名', minWidth: 200}
,{title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#tao-database'}
]]
,page: true
,limit: 15
,limits: [10, 15, 20, 25, 30]
,text: '对不起,加载出现异常!'
});
//监听工具条
table.on('tool(LAY-app-content-database)', function(obj){
var data = obj.data;
if(obj.event === 'del'){
layer.confirm('确定删除此站点?', function(index){
$.ajax({
type:'post',
url:"{:url('Database/delete')}",
data:{name:data.name},
dataType:'json',
success:function(data){
if(data.code == 0){
layer.msg(data.msg,{
icon:6,
time:2000
},function(){
location.reload();
});
} else {
layer.open({
title:'删除失败',
content:data.msg,
icon:5,
adim:6
})
}
}
});
//obj.del();
layer.close(index);
});
} else if(obj.event === 'down'){
var tr = $(obj.tr);
layer.open({
type: 2
,title: '编辑支出'
,content: "{:url('Database/down')}" + '?id='+ data.id
,area: ['420px', '460px']
,btn: ['确定', '取消']
,yes: function(index, layero){
//获取iframe元素的值
var iframeWindow = window['layui-layer-iframe'+ index]
,submit = layero.find('iframe').contents().find("#LAY-admin-pay-submit");
//监听提交
iframeWindow.layui.form.on('submit(LAY-admin-pay-submit)', function(data){
var field = data.field; //获取提交的字段
//提交 Ajax 成功后,静态更新表格中的数据
$.ajax({
type:"post",
url:payEdit,
data:field,
daType:"json",
success:function (res){
if (res.code == 0) {
layer.msg(res.msg,{
icon:6,
time:2000
});
} else {
layer.open({
tiele:'修改失败',
content:res.msg,
icon:5,
anim:6
});
}
}
});
table.reload('LAY-app-content-pay'); //数据刷新
layer.close(index); //关闭弹层
});
submit.trigger('click');
}
,success: function(layero, index){
//给iframe元素赋值
var othis = layero.find('iframe').contents().find("#layuiadmin-app-form-pay").click();
othis.find('input[name="pay_value"]').val(Math.abs(data.pay_value))
,othis.find('input[name="pay_name"]').val(data.pay_name);
}
});
}
});
$('#back1').on('click',function(){
//询问框
layer.confirm('确定备份?', {
btn: ['确定','取消'] //按钮
}, function(){
console.log(123);
backup({});
//layer.msg('的确很重要', {icon: 1});
}
);
});
$('.layui-btn.layuiadmin-btn-database').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
});
</script>
{/block}

View File

@ -1,14 +1,14 @@
{extend name="public/base" /}
{block name="title"}登入 - TaoLer{/block}
{block name="title"}登入 - TaoilSys加油站管理系统{/block}
{block name="css"}<link rel="stylesheet" href="/static/admin/style/login.css" media="all">{/block}
{block name="body"}
<div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;">
<div class="layadmin-user-login-main">
<div class="layadmin-user-login-box layadmin-user-login-header">
<h2>TaolerAdmin</h2>
<p>TaoLer后台管理系统</p>
<h2>TaoilSysAdmin</h2>
<p>TaoilSys油站管理系统-专业版</p>
</div>
<div class="layadmin-user-login-box layadmin-user-login-body layui-form">
<div class="layui-form-item">
@ -23,7 +23,7 @@
<div class="layui-row">
<div class="layui-col-xs7">
<label class="layadmin-user-login-icon layui-icon layui-icon-vercode" for="LAY-user-login-vercode"></label>
<input type="text" name="captcha" id="LAY-user-login-vercode" lay-verify="required" placeholder="图形验证码" class="layui-input">
<input type="text" name="captcha" autocomplete="off" id="LAY-user-login-vercode" lay-verify="required" placeholder="图形验证码" class="layui-input">
</div>
<div class="layui-col-xs5">
<div style="margin-left: 10px;">
@ -37,7 +37,7 @@
<a href="{:url('admin/login/forget')}" class="layadmin-user-jump-change layadmin-link" style="margin-top: 7px;">忘记密码?</a>
</div>
<div class="layui-form-item">
<input type="hidden" class="layui-hide" name="__token__" value="{:token()}" />
<button class="layui-btn layui-btn-fluid" lay-submit lay-filter="LAY-user-login-submit" id="LAY-user-login-submit">登 入</button>
</div>
<div class="layui-trans layui-form-item layadmin-user-login-other">
@ -123,7 +123,7 @@
,icon: 1
,time: 1000
}, function(){
location.href = "{:url('admin/index/index')}"; //后台主页
location.href = "{:url('index/index')}"; //后台主页
});
} else {
layer.open({

View File

@ -4,13 +4,13 @@ Navicat MySQL Data Transfer
Source Server : lc
Source Server Version : 50730
Source Host : localhost:3306
Source Database : 1127
Source Database : taotao
Target Server Type : MYSQL
Target Server Version : 50730
File Encoding : 65001
Date: 2020-11-27 14:48:02
Date: 2021-01-30 17:41:02
*/
SET FOREIGN_KEY_CHECKS=0;
@ -41,7 +41,7 @@ CREATE TABLE `tao_admin` (
-- ----------------------------
-- Records of tao_admin
-- ----------------------------
INSERT INTO `tao_admin` VALUES ('1', 'admin', '管理员', '95d6f8d0d0c3b45e5dbe4057da1b149e', 'taoler@qq.com', '13812345678', '1', '1', '1', '2019.1.1 新年发布新版本!', '127.0.0.1', '1578986287', '1579053025', '1578986600', '0');
INSERT INTO `tao_admin` VALUES ('1', 'admin', '管理员', '95d6f8d0d0c3b45e5dbe4057da1b149e', 'taoler@qq.com', '13812345678', '1', '1', '1', '2019.1.1 新年发布新版本!', '127.0.0.1', '1611997302', '1579053025', '1578986600', '0');
INSERT INTO `tao_admin` VALUES ('2', 'test', '', '3dbfa76bd34a2a0274f5d52f5529ccb3', 'test@qq.com', '13567891236', '0', '0', '2', '', '127.0.0.1', '1578643147', '1555892325', '1576554415', '0');
-- ----------------------------
@ -127,6 +127,31 @@ CREATE TABLE `tao_auth_group_access` (
-- Records of tao_auth_group_access
-- ----------------------------
-- ----------------------------
-- Table structure for tao_auth_group_copy
-- ----------------------------
DROP TABLE IF EXISTS `tao_auth_group_copy`;
CREATE TABLE `tao_auth_group_copy` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色ID',
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '角色名称',
`rules` char(255) NOT NULL DEFAULT '',
`limits` varchar(255) NOT NULL DEFAULT '' COMMENT '权限范围',
`descr` varchar(255) NOT NULL DEFAULT '' COMMENT '权限描述',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '角色状态1可用0禁止',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tao_auth_group_copy
-- ----------------------------
INSERT INTO `tao_auth_group_copy` VALUES ('1', '超级管理员', '5,15,21,22,62,63,23,17,27,28,64,16,24,26,25,4,20,32,33,34,14,29,30,31,1,65,6,35,36,37,38,7,39,40,41,42,8,43,44,45,66,9,47,48,49,50,46,67,2,10,51,11,18,52,54,55,19,56,57,58,59,60,53,3,12,13', '管理所有的管理员', '所有权限', '1', '0', '1578984825', '0');
INSERT INTO `tao_auth_group_copy` VALUES ('2', '管理员', '5,15,21,22,62,63,23,17,27,28,64,16,24,26,25,1,65,6,35,36,37,38,67,3,12,13', '所有列表的管理', '普通管理员', '1', '0', '1578984832', '0');
INSERT INTO `tao_auth_group_copy` VALUES ('3', '帖子管理', '5,15,21,22,62,63,23,17,27,28,64,16,24,26,25', '负责帖子的审核', '文章专员', '1', '0', '1578980219', '0');
INSERT INTO `tao_auth_group_copy` VALUES ('4', '网站维护', '5,15,21,22,62,63,23,17,27,28,64,16,24,26,25,90,2,10,51,11,18,52,54,55,19,56,57,58,59,60,53,3,12,13', '对数据进行统计', '网站维护', '1', '0', '1588065032', '0');
-- ----------------------------
-- Table structure for tao_auth_rule
-- ----------------------------
@ -149,7 +174,7 @@ CREATE TABLE `tao_auth_rule` (
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=93 DEFAULT CHARSET=utf8;
) ENGINE=MyISAM AUTO_INCREMENT=97 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tao_auth_rule
@ -162,7 +187,7 @@ INSERT INTO `tao_auth_rule` VALUES ('5', 'article', '内容', '', '1', '1', '0',
INSERT INTO `tao_auth_rule` VALUES ('6', 'admin/User/list', '用户管理', '', '1', '1', '1', '1', '', '1', '1', '', '0', '1578901015', '0');
INSERT INTO `tao_auth_rule` VALUES ('7', 'admin/Admin/index', '管理员', '', '1', '1', '1', '1', '', '1', '6', '', '0', '1578901133', '0');
INSERT INTO `tao_auth_rule` VALUES ('8', 'admin/AuthGroup/list', '角色管理', '', '1', '1', '1', '1', '', '1', '11', '', '0', '1578901282', '0');
INSERT INTO `tao_auth_rule` VALUES ('9', 'admin/AuthRule/index', '权限管理', '', '1', '1', '1', '1', '', '1', '16', '', '0', '1578981541', '0');
INSERT INTO `tao_auth_rule` VALUES ('9', 'admin/AuthRule/index', '权限菜单', '', '1', '1', '2', '1', '', '1', '16', '', '0', '1611998671', '0');
INSERT INTO `tao_auth_rule` VALUES ('10', 'admin/Set/index', '网站设置', '', '1', '1', '2', '1', '', '1', '1', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('11', 'admin/Set/server', '综合服务', '', '1', '1', '2', '1', '', '1', '3', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('12', 'admin/Admin/info', '基本资料', '', '1', '1', '3', '1', '', '1', '50', '', '0', '1578980034', '0');
@ -170,70 +195,74 @@ INSERT INTO `tao_auth_rule` VALUES ('13', 'admin/Admin/repass', '修改密码',
INSERT INTO `tao_auth_rule` VALUES ('15', 'admin/Forum/list', '帖子管理', '', '1', '1', '5', '1', '', '1', '1', '', '0', '1578902605', '0');
INSERT INTO `tao_auth_rule` VALUES ('16', 'admin/Forum/tags', '分类管理', '', '1', '1', '5', '1', '', '1', '11', '', '0', '1578904950', '0');
INSERT INTO `tao_auth_rule` VALUES ('17', 'admin/Forum/replys', '评论管理', '', '1', '1', '5', '1', '', '1', '7', '', '0', '1578904590', '0');
INSERT INTO `tao_auth_rule` VALUES ('18', 'admin/Slider/index', '广告投放', '', '1', '1', '2', '1', '', '1', '4', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('18', 'admin/Slider/index', '广告投放', '', '1', '1', '93', '1', '', '1', '4', '', '0', '1611999603', '0');
INSERT INTO `tao_auth_rule` VALUES ('19', 'admin/Upgrade/index', '系统升级', '', '1', '1', '2', '1', '', '1', '8', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('21', 'admin/Forum/listform', '编辑帖子', '', '1', '1', '5', '1', '', '0', '2', '', '0', '1578903229', '0');
INSERT INTO `tao_auth_rule` VALUES ('22', 'admin/Forum/listdel', '删除帖子', '', '1', '1', '5', '1', '', '0', '3', '', '0', '1578903919', '0');
INSERT INTO `tao_auth_rule` VALUES ('23', 'admin/Forum/check', '审核帖子', '', '1', '1', '5', '1', '', '0', '6', '', '0', '1578904476', '0');
INSERT INTO `tao_auth_rule` VALUES ('24', 'admin/Forum/addtags', '添加分类', '', '1', '1', '5', '1', '', '0', '12', '', '0', '1578904966', '0');
INSERT INTO `tao_auth_rule` VALUES ('25', 'admin/Forum/tagsform', '编辑分类', '', '1', '1', '5', '1', '', '0', '14', '', '0', '1578905046', '0');
INSERT INTO `tao_auth_rule` VALUES ('26', 'admin/Forum/tagsdelete', '删除分类', '', '1', '1', '5', '1', '', '0', '13', '', '0', '1578904996', '0');
INSERT INTO `tao_auth_rule` VALUES ('27', 'admin/Forum/replysform', '编辑评论', '', '1', '1', '5', '1', '', '0', '8', '', '0', '1578904627', '0');
INSERT INTO `tao_auth_rule` VALUES ('28', 'admin/Forum/redel', '删除评论', '', '1', '1', '5', '1', '', '0', '9', '', '0', '1578904856', '0');
INSERT INTO `tao_auth_rule` VALUES ('35', 'admin/User/userForm', '添加用户', '', '1', '1', '1', '1', '', '0', '2', '', '0', '1578901074', '0');
INSERT INTO `tao_auth_rule` VALUES ('36', 'admin/User/userEdit', '编辑用户', '', '1', '1', '1', '1', '', '0', '3', '', '0', '1578901089', '0');
INSERT INTO `tao_auth_rule` VALUES ('37', 'admin/User/delete', '删除用户', '', '1', '1', '1', '1', '', '0', '4', '', '0', '1578901099', '0');
INSERT INTO `tao_auth_rule` VALUES ('38', 'admin/User/check', '审核用户', '', '1', '1', '1', '1', '', '0', '5', '', '0', '1578905291', '0');
INSERT INTO `tao_auth_rule` VALUES ('39', 'admin/Admin/add', '添加管理员', '', '1', '1', '1', '1', '', '0', '7', '', '0', '1578901163', '0');
INSERT INTO `tao_auth_rule` VALUES ('40', 'admin/Admin/edit', '编辑管理员', '', '1', '1', '1', '1', '', '0', '8', '', '0', '1578901184', '0');
INSERT INTO `tao_auth_rule` VALUES ('41', 'admin/Admin/delete', '删除管理员', '', '1', '1', '1', '1', '', '0', '9', '', '0', '1578901198', '0');
INSERT INTO `tao_auth_rule` VALUES ('42', 'admin/Admin/check', '审核管理员', '', '1', '1', '1', '1', '', '0', '10', '', '0', '1578901216', '0');
INSERT INTO `tao_auth_rule` VALUES ('43', 'admin/AuthGroup/roleAdd', '添加角色', '', '1', '1', '1', '1', '', '0', '12', '', '0', '1578981437', '0');
INSERT INTO `tao_auth_rule` VALUES ('44', 'admin/AuthGroup/roleEdit', '编辑角色', '', '1', '1', '1', '1', '', '0', '13', '', '0', '1578901349', '0');
INSERT INTO `tao_auth_rule` VALUES ('45', 'admin/AuthGroup/roledel', '删除角色', '', '1', '1', '1', '1', '', '0', '14', '', '0', '1578971659', '0');
INSERT INTO `tao_auth_rule` VALUES ('46', 'admin/AuthRule/add', '添加权限', '', '1', '1', '1', '1', '', '0', '21', '', '0', '1578981581', '0');
INSERT INTO `tao_auth_rule` VALUES ('47', 'admin/AuthRule/edit', '编辑权限', '', '1', '1', '1', '1', '', '0', '17', '', '0', '1578901457', '0');
INSERT INTO `tao_auth_rule` VALUES ('48', 'admin/AuthRule/delete', '删除权限', '', '1', '1', '1', '1', '', '0', '18', '', '0', '1578901469', '0');
INSERT INTO `tao_auth_rule` VALUES ('49', 'admin/AuthRule/check', '审核权限', '', '1', '1', '1', '1', '', '0', '19', '', '0', '1578901484', '0');
INSERT INTO `tao_auth_rule` VALUES ('50', 'admin/AuthRule/menushow', '菜单权限', '', '1', '1', '1', '1', '', '0', '20', '', '0', '1578901495', '0');
INSERT INTO `tao_auth_rule` VALUES ('51', 'admin/Set/upload', '上传logo', '', '1', '1', '2', '1', '', '0', '2', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('52', 'admin/Slider/add', '添加广告', '', '1', '1', '2', '1', '', '0', '5', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('53', 'admin/Slider/edit', '编辑广告', '', '1', '1', '2', '1', '', '0', '14', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('54', 'admin/Slider/delete', '删除广告', '', '1', '1', '2', '1', '', '0', '6', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('55', 'admin/Slider/uploadimg', '上传广告图片', '', '1', '1', '2', '1', '', '0', '7', '', '0', '1578906577', '0');
INSERT INTO `tao_auth_rule` VALUES ('56', 'admin/Upgrade/key', '设置key', '', '1', '1', '2', '1', '', '0', '9', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('57', 'admin/Upgrade/keyedit', '修改key', '', '1', '1', '2', '1', '', '0', '10', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('58', 'admin/Upgrade/check', '升级检测', '', '1', '1', '2', '1', '', '0', '11', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('59', 'admin/Upgrade/upload', '自动升级', '', '1', '1', '2', '1', '', '0', '12', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('60', 'admin/Upgrade/uploadzip', '上传升级包', '', '1', '1', '2', '1', '', '0', '13', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('62', 'admin/Forum/top', '置顶帖子', '', '1', '1', '5', '1', '', '0', '4', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('63', 'admin/Forum/hot', '加精帖子', '', '1', '1', '5', '1', '', '0', '5', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('64', 'admin/Froum/recheck', '审核评论', '', '1', '1', '5', '1', '', '0', '10', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('65', 'admin/User/uploadImg', '上传用户头像', '', '1', '1', '1', '1', '', '0', '0', '', '0', '1578981624', '0');
INSERT INTO `tao_auth_rule` VALUES ('66', 'admin/AuthGroup/check', '审核角色', '', '1', '1', '1', '1', '', '0', '15', '', '0', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('67', 'admin/Sign/signRule', '签到规则', '', '1', '1', '2', '1', '', '0', '15', '', '1585547595', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('68', 'admin/Sign/add', '添加签到', '', '1', '1', '2', '1', '', '0', '16', '', '1585547705', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('69', 'admin/Sign/signEdit', '编辑签到', '', '1', '1', '2', '1', '', '0', '17', '', '1585547774', '1585548298', '0');
INSERT INTO `tao_auth_rule` VALUES ('70', 'admin/Sign/delete', '删除签到', '', '1', '1', '2', '1', '', '0', '18', '', '1585547817', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('71', 'admin/Vip/vipRule', '用户等级', '', '1', '1', '2', '1', '', '0', '19', '', '1585547921', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('72', 'admin/Vip/add', '添加vip等级', '', '1', '1', '2', '1', '', '0', '20', '', '1585547981', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('73', 'admin/Vip/vipEdit', '编辑vip等级', '', '1', '1', '1', '1', '', '0', '21', '', '1585548029', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('74', 'admin/Vip/delete', '删除vip等级', '', '1', '1', '2', '1', '', '0', '22', '', '1585548077', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('75', 'admin/Set/email', '邮箱设置', '', '1', '1', '2', '1', '', '0', '23', '', '1585548143', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('21', 'admin/Forum/listform', '编辑帖子', '', '1', '1', '15', '2', '', '0', '2', '', '0', '1611997428', '0');
INSERT INTO `tao_auth_rule` VALUES ('22', 'admin/Forum/listdel', '删除帖子', '', '1', '1', '15', '2', '', '0', '3', '', '0', '1611997448', '0');
INSERT INTO `tao_auth_rule` VALUES ('23', 'admin/Forum/check', '审核帖子', '', '1', '1', '15', '2', '', '0', '6', '', '0', '1611997474', '0');
INSERT INTO `tao_auth_rule` VALUES ('24', 'admin/Forum/addtags', '添加分类', '', '1', '1', '16', '2', '', '0', '12', '', '0', '1611997513', '0');
INSERT INTO `tao_auth_rule` VALUES ('25', 'admin/Forum/tagsform', '编辑分类', '', '1', '1', '16', '2', '', '0', '14', '', '0', '1611997535', '0');
INSERT INTO `tao_auth_rule` VALUES ('26', 'admin/Forum/tagsdelete', '删除分类', '', '1', '1', '16', '2', '', '0', '13', '', '0', '1611997523', '0');
INSERT INTO `tao_auth_rule` VALUES ('27', 'admin/Forum/replysform', '编辑评论', '', '1', '1', '17', '2', '', '0', '8', '', '0', '1611997484', '0');
INSERT INTO `tao_auth_rule` VALUES ('28', 'admin/Forum/redel', '删除评论', '', '1', '1', '17', '2', '', '0', '9', '', '0', '1611997494', '0');
INSERT INTO `tao_auth_rule` VALUES ('35', 'admin/User/userForm', '添加用户', '', '1', '1', '6', '2', '', '0', '2', '', '0', '1611997673', '0');
INSERT INTO `tao_auth_rule` VALUES ('36', 'admin/User/userEdit', '编辑用户', '', '1', '1', '6', '2', '', '0', '3', '', '0', '1611997690', '0');
INSERT INTO `tao_auth_rule` VALUES ('37', 'admin/User/delete', '删除用户', '', '1', '1', '6', '2', '', '0', '4', '', '0', '1611997701', '0');
INSERT INTO `tao_auth_rule` VALUES ('38', 'admin/User/check', '审核用户', '', '1', '1', '6', '2', '', '0', '5', '', '0', '1611997713', '0');
INSERT INTO `tao_auth_rule` VALUES ('39', 'admin/Admin/add', '添加管理员', '', '1', '1', '7', '2', '', '0', '7', '', '0', '1611997732', '0');
INSERT INTO `tao_auth_rule` VALUES ('40', 'admin/Admin/edit', '编辑管理员', '', '1', '1', '7', '2', '', '0', '8', '', '0', '1611997747', '0');
INSERT INTO `tao_auth_rule` VALUES ('41', 'admin/Admin/delete', '删除管理员', '', '1', '1', '7', '2', '', '0', '9', '', '0', '1611997760', '0');
INSERT INTO `tao_auth_rule` VALUES ('42', 'admin/Admin/check', '审核管理员', '', '1', '1', '7', '2', '', '0', '10', '', '0', '1611997772', '0');
INSERT INTO `tao_auth_rule` VALUES ('43', 'admin/AuthGroup/roleAdd', '添加角色', '', '1', '1', '8', '2', '', '0', '12', '', '0', '1611997790', '0');
INSERT INTO `tao_auth_rule` VALUES ('44', 'admin/AuthGroup/roleEdit', '编辑角色', '', '1', '1', '8', '2', '', '0', '13', '', '0', '1611997805', '0');
INSERT INTO `tao_auth_rule` VALUES ('45', 'admin/AuthGroup/roledel', '删除角色', '', '1', '1', '8', '2', '', '0', '14', '', '0', '1611997820', '0');
INSERT INTO `tao_auth_rule` VALUES ('46', 'admin/AuthRule/add', '添加权限', '', '1', '1', '9', '2', '', '0', '21', '', '0', '1611997901', '0');
INSERT INTO `tao_auth_rule` VALUES ('47', 'admin/AuthRule/edit', '编辑权限', '', '1', '1', '9', '2', '', '0', '17', '', '0', '1611997849', '0');
INSERT INTO `tao_auth_rule` VALUES ('48', 'admin/AuthRule/delete', '删除权限', '', '1', '1', '9', '2', '', '0', '18', '', '0', '1611997869', '0');
INSERT INTO `tao_auth_rule` VALUES ('49', 'admin/AuthRule/check', '审核权限', '', '1', '1', '9', '2', '', '0', '19', '', '0', '1611997884', '0');
INSERT INTO `tao_auth_rule` VALUES ('50', 'admin/AuthRule/menushow', '菜单权限', '', '1', '1', '9', '2', '', '0', '20', '', '0', '1611997929', '0');
INSERT INTO `tao_auth_rule` VALUES ('51', 'admin/Set/upload', '上传logo', '', '1', '1', '10', '2', '', '0', '2', '', '0', '1611998097', '0');
INSERT INTO `tao_auth_rule` VALUES ('52', 'admin/Slider/add', '添加广告', '', '1', '1', '18', '2', '', '0', '5', '', '0', '1611998128', '0');
INSERT INTO `tao_auth_rule` VALUES ('53', 'admin/Slider/edit', '编辑广告', '', '1', '1', '18', '2', '', '0', '14', '', '0', '1611998263', '0');
INSERT INTO `tao_auth_rule` VALUES ('54', 'admin/Slider/delete', '删除广告', '', '1', '1', '18', '2', '', '0', '6', '', '0', '1611998141', '0');
INSERT INTO `tao_auth_rule` VALUES ('55', 'admin/Slider/uploadimg', '上传广告图片', '', '1', '1', '18', '2', '', '0', '7', '', '0', '1611998156', '0');
INSERT INTO `tao_auth_rule` VALUES ('56', 'admin/Upgrade/key', '设置key', '', '1', '1', '19', '2', '', '0', '9', '', '0', '1611998178', '0');
INSERT INTO `tao_auth_rule` VALUES ('57', 'admin/Upgrade/keyedit', '修改key', '', '1', '1', '19', '2', '', '0', '10', '', '0', '1611998192', '0');
INSERT INTO `tao_auth_rule` VALUES ('58', 'admin/Upgrade/check', '升级检测', '', '1', '1', '19', '2', '', '0', '11', '', '0', '1611998214', '0');
INSERT INTO `tao_auth_rule` VALUES ('59', 'admin/Upgrade/upload', '自动升级', '', '1', '1', '19', '2', '', '0', '12', '', '0', '1611998230', '0');
INSERT INTO `tao_auth_rule` VALUES ('60', 'admin/Upgrade/uploadzip', '上传升级包', '', '1', '1', '19', '2', '', '0', '13', '', '0', '1611998245', '0');
INSERT INTO `tao_auth_rule` VALUES ('62', 'admin/Forum/top', '置顶帖子', '', '1', '1', '15', '2', '', '0', '4', '', '0', '1611997455', '0');
INSERT INTO `tao_auth_rule` VALUES ('63', 'admin/Forum/hot', '加精帖子', '', '1', '1', '15', '2', '', '0', '5', '', '0', '1611997465', '0');
INSERT INTO `tao_auth_rule` VALUES ('64', 'admin/Froum/recheck', '审核评论', '', '1', '1', '17', '2', '', '0', '10', '', '0', '1611997503', '0');
INSERT INTO `tao_auth_rule` VALUES ('65', 'admin/User/uploadImg', '上传用户头像', '', '1', '1', '6', '2', '', '0', '0', '', '0', '1611997661', '0');
INSERT INTO `tao_auth_rule` VALUES ('66', 'admin/AuthGroup/check', '审核角色', '', '1', '1', '8', '2', '', '0', '15', '', '0', '1611997835', '0');
INSERT INTO `tao_auth_rule` VALUES ('67', 'admin/Sign/signRule', '签到规则', '', '1', '1', '11', '2', '', '0', '15', '', '1585547595', '1611998427', '0');
INSERT INTO `tao_auth_rule` VALUES ('68', 'admin/Sign/add', '添加签到', '', '1', '1', '11', '2', '', '0', '16', '', '1585547705', '1611998444', '0');
INSERT INTO `tao_auth_rule` VALUES ('69', 'admin/Sign/signEdit', '编辑签到', '', '1', '1', '11', '2', '', '0', '17', '', '1585547774', '1611998457', '0');
INSERT INTO `tao_auth_rule` VALUES ('70', 'admin/Sign/delete', '删除签到', '', '1', '1', '11', '2', '', '0', '18', '', '1585547817', '1611998470', '0');
INSERT INTO `tao_auth_rule` VALUES ('71', 'admin/Vip/vipRule', '用户等级', '', '1', '1', '11', '2', '', '0', '19', '', '1585547921', '1611998481', '0');
INSERT INTO `tao_auth_rule` VALUES ('72', 'admin/Vip/add', '添加vip等级', '', '1', '1', '11', '2', '', '0', '20', '', '1585547981', '1611998492', '0');
INSERT INTO `tao_auth_rule` VALUES ('73', 'admin/Vip/vipEdit', '编辑vip等级', '', '1', '1', '11', '2', '', '0', '21', '', '1585548029', '1611998556', '0');
INSERT INTO `tao_auth_rule` VALUES ('74', 'admin/Vip/delete', '删除vip等级', '', '1', '1', '11', '2', '', '0', '22', '', '1585548077', '1611998503', '0');
INSERT INTO `tao_auth_rule` VALUES ('75', 'admin/Set/email', '邮箱设置', '', '1', '1', '10', '2', '', '0', '23', '', '1585548143', '1611998372', '0');
INSERT INTO `tao_auth_rule` VALUES ('76', 'admin/Notice/index', '发布通知', '', '1', '1', '4', '1', '', '1', '10', '', '1585618141', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('77', 'admin/Notice/add', '添加通知', '', '1', '1', '4', '1', '', '0', '11', '', '1585663336', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('78', 'admin/Notice/edit', '编辑通知', '', '1', '1', '4', '1', '', '0', '12', '', '1585663366', '1585663465', '0');
INSERT INTO `tao_auth_rule` VALUES ('79', 'admin/Notice/delete', '删除通知', '', '1', '1', '4', '1', '', '0', '13', '', '1585663412', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('77', 'admin/Notice/add', '添加通知', '', '1', '1', '76', '2', '', '0', '11', '', '1585663336', '1611997580', '0');
INSERT INTO `tao_auth_rule` VALUES ('78', 'admin/Notice/edit', '编辑通知', '', '1', '1', '76', '2', '', '0', '12', '', '1585663366', '1611997590', '0');
INSERT INTO `tao_auth_rule` VALUES ('79', 'admin/Notice/delete', '删除通知', '', '1', '1', '76', '2', '', '0', '13', '', '1585663412', '1611997601', '0');
INSERT INTO `tao_auth_rule` VALUES ('83', 'admin/AuthAccess/index', '管理员权限', '', '1', '1', '1', '1', '', '1', '22', '', '1585794015', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('84', 'admin/AuthAccess/add', '添加管理员权限', '', '1', '1', '1', '1', '', '0', '23', '', '1585806544', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('85', 'admin/AuthAccess/edit', '编辑管理员权限', '', '1', '1', '1', '1', '', '0', '24', '', '1585806592', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('86', 'admin/AuthAccess/delete', '删除管理员权限', '', '1', '1', '1', '1', '', '0', '25', '', '1585806620', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('87', 'admin/AuthAccess/check', '审核管理员权限', '', '1', '1', '1', '1', '', '0', '26', '', '1585806653', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('88', 'admin/Set/website', '网站信息保存', '', '1', '1', '2', '1', '', '0', '24', '', '1585819936', '1585820211', '0');
INSERT INTO `tao_auth_rule` VALUES ('89', 'admin/User/auth', '设置超级用户', '', '1', '1', '1', '1', '', '0', '22', '', '1578984801', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('90', 'admin/Forum/tagshot', '开启热点', '', '1', '1', '5', '1', '', '0', '15', '', '1585841826', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('91', 'admin/Admin/infoSet', '资料设置', '', '1', '1', '3', '1', '', '0', '62', '', '1586245669', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('92', 'admin/Admin/repassSet', '密码设置', '', '1', '1', '3', '1', '', '0', '64', '', '1586245727', '0', '0');
INSERT INTO `tao_auth_rule` VALUES ('84', 'admin/AuthAccess/add', '添加管理员权限', '', '1', '1', '83', '2', '', '0', '23', '', '1585806544', '1611998012', '0');
INSERT INTO `tao_auth_rule` VALUES ('85', 'admin/AuthAccess/edit', '编辑管理员权限', '', '1', '1', '83', '2', '', '0', '24', '', '1585806592', '1611998030', '0');
INSERT INTO `tao_auth_rule` VALUES ('86', 'admin/AuthAccess/delete', '删除管理员权限', '', '1', '1', '83', '2', '', '0', '25', '', '1585806620', '1611998046', '0');
INSERT INTO `tao_auth_rule` VALUES ('87', 'admin/AuthAccess/check', '审核管理员权限', '', '1', '1', '83', '2', '', '0', '26', '', '1585806653', '1611998060', '0');
INSERT INTO `tao_auth_rule` VALUES ('88', 'admin/Set/website', '网站信息保存', '', '1', '1', '10', '2', '', '0', '24', '', '1585819936', '1611998395', '0');
INSERT INTO `tao_auth_rule` VALUES ('89', 'admin/User/auth', '设置超级用户', '', '1', '1', '6', '2', '', '0', '22', '', '1578984801', '1611997990', '0');
INSERT INTO `tao_auth_rule` VALUES ('90', 'admin/Forum/tagshot', '开启热点', '', '1', '1', '16', '2', '', '0', '15', '', '1585841826', '1611997546', '0');
INSERT INTO `tao_auth_rule` VALUES ('91', 'admin/Admin/infoSet', '资料设置', '', '1', '1', '12', '2', '', '0', '62', '', '1586245669', '1611998517', '0');
INSERT INTO `tao_auth_rule` VALUES ('92', 'admin/Admin/repassSet', '密码设置', '', '1', '1', '13', '2', '', '0', '64', '', '1586245727', '1611998534', '0');
INSERT INTO `tao_auth_rule` VALUES ('93', 'servers', '服务', '', '1', '1', '0', '0', 'layui-icon-cols', '1', '2', '', '1611286515', '1611997619', '0');
INSERT INTO `tao_auth_rule` VALUES ('94', 'admin/Database/index', '数据备份', '', '1', '1', '93', '1', '', '1', '9', '', '1611897141', '1611902589', '0');
INSERT INTO `tao_auth_rule` VALUES ('95', 'admin/Database/backup', '进行备份', '', '1', '1', '94', '2', '', '0', '10', '', '1611897285', '1611902610', '0');
INSERT INTO `tao_auth_rule` VALUES ('96', 'admin/Database/delete', '备份删除', '', '1', '1', '94', '2', '', '0', '0', '', '1611902429', '0', '0');
-- ----------------------------
-- Table structure for tao_cate
@ -304,6 +333,28 @@ CREATE TABLE `tao_comment` (
-- ----------------------------
INSERT INTO `tao_comment` VALUES ('1', 'https://www.aieok.com', '1', '1', '0', '0', '1', '1555127897', '1578977505', '1578977505');
-- ----------------------------
-- Table structure for tao_friend_link
-- ----------------------------
DROP TABLE IF EXISTS `tao_friend_link`;
CREATE TABLE `tao_friend_link` (
`id` int(2) unsigned NOT NULL AUTO_INCREMENT COMMENT '友情链接id',
`linkname` varchar(10) NOT NULL COMMENT '链接名称',
`linksrc` varchar(60) NOT NULL COMMENT '链接地址',
`linkimg` varchar(60) NOT NULL COMMENT '链接图片',
`creat_time` int(10) NOT NULL COMMENT '创建时间',
`update_time` int(10) NOT NULL COMMENT '更新时间',
`delete_time` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tao_friend_link
-- ----------------------------
INSERT INTO `tao_friend_link` VALUES ('1', 'taobao', 'https://www.taobao.com', '', '0', '0', '0');
INSERT INTO `tao_friend_link` VALUES ('2', 'baidu', 'https://www.baidu.com', '', '0', '0', '0');
INSERT INTO `tao_friend_link` VALUES ('3', 'tensent', 'https://www.qq.com', '', '0', '0', '0');
-- ----------------------------
-- Table structure for tao_mail_server
-- ----------------------------
@ -366,6 +417,52 @@ CREATE TABLE `tao_message_to` (
-- Records of tao_message_to
-- ----------------------------
-- ----------------------------
-- Table structure for tao_plugins
-- ----------------------------
DROP TABLE IF EXISTS `tao_plugins`;
CREATE TABLE `tao_plugins` (
`id` int(5) unsigned NOT NULL AUTO_INCREMENT,
`plugins_name` varchar(20) NOT NULL COMMENT '插件名称',
`plugins_version` varchar(20) NOT NULL COMMENT '插件版本',
`plugins_auther` varchar(20) NOT NULL COMMENT '插件作者',
`plugins_resume` varchar(255) NOT NULL DEFAULT '' COMMENT '简介',
`plugins_price` int(5) NOT NULL COMMENT '差价售价',
`plugins_src` varchar(70) NOT NULL DEFAULT '' COMMENT '插件获取路径',
`plugins_status` enum('0','1') NOT NULL DEFAULT '1' COMMENT '插件状态1开启0禁止',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
PRIMARY KEY (`id`,`plugins_version`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tao_plugins
-- ----------------------------
INSERT INTO `tao_plugins` VALUES ('1', '1.1.1', '', '', '第1个版本', '0', '/storage/version/20191215/536c65fc4df42100016fa3d97b584d26.zip', '1', '1575862901', '0', '0');
INSERT INTO `tao_plugins` VALUES ('2', '1.1.2', '', '', '第2个版本', '0', '/storage/version/20191215/832e150dfbc0e88e04a408e475bce8bb.zip', '1', '1575862901', '0', '0');
INSERT INTO `tao_plugins` VALUES ('3', '1.1.3', '', '', '第3个版本', '0', '/storage/version/20191215/9ff1153045f1ad1e26c74aad148bdde3.zip', '1', '1575862901', '1575862901', '0');
INSERT INTO `tao_plugins` VALUES ('4', '1.1.4', '1.0.0', 'au', '第四个版本', '5', '/storage/version/20191209/1fae8a15fcd41181490a0c02e0218ef1.zip', '1', '1575864450', '1575864587', '0');
INSERT INTO `tao_plugins` VALUES ('5', 'hello', 'v0.0.1', 'taoler', '第一款欢迎插件', '10', '/storage/addons/20201016/2c5b581d90a92b6b154fa9bc0c73d494.zip', '1', '1602833500', '1602833500', '0');
-- ----------------------------
-- Table structure for tao_point_note
-- ----------------------------
DROP TABLE IF EXISTS `tao_point_note`;
CREATE TABLE `tao_point_note` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`controller` varchar(255) NOT NULL,
`uid` int(10) unsigned NOT NULL,
`pointid` int(10) unsigned NOT NULL,
`score` int(10) NOT NULL,
`add_time` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tao_point_note
-- ----------------------------
-- ----------------------------
-- Table structure for tao_slider
-- ----------------------------
@ -416,6 +513,7 @@ CREATE TABLE `tao_system` (
`blackname` varchar(255) NOT NULL COMMENT '注册黑名单',
`sys_version_num` varchar(5) NOT NULL COMMENT '系统版本',
`key` varchar(60) DEFAULT NULL COMMENT 'key',
`api_url` varchar(80) NOT NULL COMMENT 'api',
`base_url` varchar(50) NOT NULL DEFAULT '',
`upcheck_url` varchar(255) NOT NULL COMMENT '版本检测',
`upgrade_url` varchar(255) NOT NULL COMMENT '升级地址',
@ -427,7 +525,103 @@ CREATE TABLE `tao_system` (
-- ----------------------------
-- Records of tao_system
-- ----------------------------
INSERT INTO `tao_system` VALUES ('1', 'TaoLer社区演示站', '轻论坛系统', 'http://www.xxx.com', 'taoler', '/storage/logo/logo.png', '10', '2048', 'png|gif|jpg|jpeg|zip|rarr', '<a href=\"http://www.aieok.com\" target=\"_blank\">aieok.com 版权所有</a>', 'TaoLer,轻社区系统,bbs,论坛,Thinkphp6,layui,fly模板,', '这是一个Taoler轻社区论坛系统', '1', '1', '1', '0.0.0.0', '管理员|admin|审核员|超级|垃圾', '1.6.3', '', 'http://api.aieok.com/v1/index/cy', 'http://api.aieok.com/v1/upload/check', 'http://api.aieok.com/v1/upload/api', '1581221008', '1577419197');
INSERT INTO `tao_system` VALUES ('1', 'TaoLer社区演示站', '轻论坛系统', 'http://www.xxx.com', 'taoler', '/storage/logo/logo.png', '10', '2048', 'png|gif|jpg|jpeg|zip|rarr', '<a href=\"http://www.aieok.com\" target=\"_blank\">aieok.com 版权所有</a>', 'TaoLer,轻社区系统,bbs,论坛,Thinkphp6,layui,fly模板,', '这是一个Taoler轻社区论坛系统', '1', '1', '1', '0.0.0.0', '管理员|admin|审核员|超级|垃圾', '1.6.3', '', 'http://api.aieok.com', 'http://api.aieok.com/v1/index/cy', 'http://api.aieok.com/v1/upload/check', 'http://api.aieok.com/v1/upload/api', '1581221008', '1577419197');
-- ----------------------------
-- Table structure for tao_time_line
-- ----------------------------
DROP TABLE IF EXISTS `tao_time_line`;
CREATE TABLE `tao_time_line` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '时间线Id',
`timeline_title` varchar(255) NOT NULL COMMENT '时间线标题',
`timeline_content` text NOT NULL COMMENT '时间线内容',
`create_time` int(11) NOT NULL DEFAULT '0',
`update_time` int(11) NOT NULL DEFAULT '0',
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tao_time_line
-- ----------------------------
INSERT INTO `tao_time_line` VALUES ('8', '2019年5月1日', '<p>thinkphp5.1+layui2.4+fly3.0</p><p>TBLs0.1</p>', '1584870099', '1584870099', '0');
INSERT INTO `tao_time_line` VALUES ('9', '2019年5月5日', '<p>创建数据表结构,</p><p>建立前台框架,</p><p>构建用户端html</p><p>登录,注册,密码找回。</p>', '1584871136', '1584871136', '0');
INSERT INTO `tao_time_line` VALUES ('10', '2019年5月10日', '<p>[新增]&nbsp;注册模块,进行动态密码双重加密</p><p>[新增]登录模块加入validata验证</p><p>[新增]密码找回</p><p>[安装]phpmailer插件</p><p>[优化]验证码captcha</p>', '1584871314', '1584871314', '0');
INSERT INTO `tao_time_line` VALUES ('11', '2019年5月15日', '<p><span>[优化]</span><span>&nbsp;</span>注册模块,邮箱用户名多态登录</p><p>[优化]密码找回,更新验证码</p>', '1584871602', '1584871602', '0');
INSERT INTO `tao_time_line` VALUES ('12', '2019年5月25日', '<p>[新增]文章添加,编辑,删除</p><p>[新增]首页,分类,详情</p><p>[新增]回帖</p><p>[优化]多态登录</p><p>[优化]邮件首发验证码</p>', '1585208263', '1585208263', '0');
INSERT INTO `tao_time_line` VALUES ('13', '2019年6月1日', '<p>[新增]右栏各模块</p><p>[新增]签到</p><p>[优化]帖子发布</p><p>[更新]layui2.5</p>', '1585208481', '1585208481', '0');
INSERT INTO `tao_time_line` VALUES ('14', '2019年6月10日', '<p>[优化]前台分类导航选择</p><p>[优化]前台分类筛选选择</p><p>[优化]cate控制</p><p>[修复]未登录状态点文章发布跳转</p>', '1585208796', '1585208796', '0');
INSERT INTO `tao_time_line` VALUES ('15', '2019年6月20日', '<p>[新增]后台模版的更换</p><p>[新增]账户管理</p>', '1585209047', '1585209047', '0');
INSERT INTO `tao_time_line` VALUES ('16', '2019年7月5日', '<p>[新增]内容的管理模块</p><p>[新增]设置管理模块</p><p>[修复]前台用户页面bug</p>', '1585209329', '1585209329', '0');
INSERT INTO `tao_time_line` VALUES ('17', '2019年7月25日', '<p>[新增]应用模块,系统升级,版本发布,授权管理等</p><p><br></p>', '1585209434', '1585209434', '0');
INSERT INTO `tao_time_line` VALUES ('18', '2019年8月10日', '[优化]管理,用户,管理员,角色,权限', '1585209551', '1585209551', '0');
INSERT INTO `tao_time_line` VALUES ('19', '2019年9月10日', '<p>[更新]layui2.5.5</p><p>[修复]授权前后台</p><p>[修复]前台版本升级系统的检测</p><p><br></p>', '1585209783', '1585209783', '0');
INSERT INTO `tao_time_line` VALUES ('20', '2019年9月25日 ', '<p>[修复]权限控制</p><p>[修复]角色管理</p><p>[优化]网站设置Logo保存</p><p>[优化]前台注册在一些信息</p><p><br></p>', '1585210095', '1585210095', '0');
INSERT INTO `tao_time_line` VALUES ('21', '2019年10月5日', '[修复]一些已知bug', '1585210220', '1585210220', '0');
INSERT INTO `tao_time_line` VALUES ('22', '2019年10月25日', '<p>[更新] 升级Thinkphp6框架为正式版</p><p>[优化] 各查询条件相关优化</p>', '1585210342', '1585210342', '0');
INSERT INTO `tao_time_line` VALUES ('23', '2019年11月5日', '<p><span>[优化] 后台多模块功能的优化</span></p><p><span>[新增] 后台多个功能的增加</span></p>', '1585210449', '1585210449', '0');
INSERT INTO `tao_time_line` VALUES ('24', '2019年11月20日', '<p>[新增]广告管理</p><p>[优化]幻灯和广告合并</p><p>[修复] 账户密码,基本资料设置</p>', '1585210712', '1585210712', '0');
INSERT INTO `tao_time_line` VALUES ('25', '2019年12月5日', '<p>[新增] 安装引导程序</p><p>[优化] 数据库表</p><p>[优化] 后台数个页面的优化和新增</p>', '1585210905', '1585210905', '0');
INSERT INTO `tao_time_line` VALUES ('26', '2019年12月15日', '<p>[修复] 修复多数已知问题</p><p>[修复] 转移测试平台</p>', '1585211052', '1585211052', '0');
INSERT INTO `tao_time_line` VALUES ('27', '2019年12月30日', '<p><span>[修复] 安装引导文件的修复</span></p><p><span>[新增] 发布测试版本前的准备</span></p><p><span>[新增] 系统的介绍</span></p>', '1585211146', '1585211146', '0');
INSERT INTO `tao_time_line` VALUES ('28', '2020年1月1日 Beat 1.0', '[新增] 发布1.0测试版本命名TaoLer。', '1585211259', '1585211259', '0');
INSERT INTO `tao_time_line` VALUES ('29', '2020年1月1-31日', '<p><span>[修复] 数个问题修复和完善</span></p>', '1585211340', '1585211340', '0');
INSERT INTO `tao_time_line` VALUES ('30', '2020年2月1-29日', '<p>[新增] 帖子tags</p><p>[优化] 帖子文章的SEO</p><p>[新增] auth模块发布至github</p><p>[更新] auth权限管理插件</p><p>[修复] 引导文件的数据库配置</p><p>[修复] 授权在某些服务器的获取</p><p>[修复] 文件上传</p>', '1585211685', '1585211685', '0');
INSERT INTO `tao_time_line` VALUES ('31', '2020年3月10', '<p><span>[优化] 帖子,分类各类缓存,数据库查询,性能优化等</span></p><p>[优化] 前台超级管理员权限的分配</p><p><span>[修复] 编辑帖子发帖人改变的bug</span></p><p>[新增] 插件管理模块</p><p>[新增] 登录日志文件,浏览帖子日志</p>', '1585212061', '1585212061', '0');
INSERT INTO `tao_time_line` VALUES ('32', '2020年3月20', '<p>[新增] 版本更新日志线</p><p>[修复] 前台会员页面展示</p><p>[优化] 多个页面的缓存</p><p>[优化] 前台用户授权页面</p>', '1585212188', '1585212188', '0');
INSERT INTO `tao_time_line` VALUES ('33', '2020年3月26', '<p>[新增] 站内信消息模块</p><p><br></p>', '1585212283', '1585212283', '0');
INSERT INTO `tao_time_line` VALUES ('34', '2020年3月29', '<p><span>[新增] 用户后台签到模块</span></p><p>[新增] 积分等级后台设置</p><p>[优化] 消息通知功能</p>', '1585484428', '1585484428', '0');
INSERT INTO `tao_time_line` VALUES ('35', '2020年3月30', '<p>[新增] VIP模块</p><p>[优化] 优化签到积分规则</p><p>[修复] 权限规则</p>', '1585577995', '1585577995', '0');
INSERT INTO `tao_time_line` VALUES ('36', 'TaoLer V1.0.0正式版', '<p>[新增] 后台消息管理模块,发全站内信,单独推送用户消息</p><p>[优化] 前台用户系统消息和接收系统消息&nbsp;</p><p>[版本] 框架基本定型推送1.0正式版,其它待优化事项逐步完成</p>', '1585669343', '1585669343', '0');
INSERT INTO `tao_time_line` VALUES ('37', '222', '222', '1585752242', '1585752256', '1585752256');
INSERT INTO `tao_time_line` VALUES ('38', '111', '1111', '1585754796', '1585754830', '1585754830');
INSERT INTO `tao_time_line` VALUES ('39', 'TaoLer V1.1.0', '<p>[修复] 后台权限控制更加仔细,权限,角色,用户组分配三级设置</p><p>[修复] 移除管理员的角色直接分配</p><p>[新增] 后台分类的热点的单选设置选项</p><p>[新增] 添加数据库auth_group_access id字段,可以更改用户的编辑操作</p><p>[新增] 权限控制菜单和按钮规则的添加</p><p>[优化] 站内信后台通知和前台之间的系统通知和用户通知的读取</p>', '1585898118', '1585898118', '0');
INSERT INTO `tao_time_line` VALUES ('40', 'qqq', 'qqqqqq', '1588050588', '1605504731', '1605504731');
INSERT INTO `tao_time_line` VALUES ('41', 'ddd', 'dddd', '1605507216', '1605507216', '0');
-- ----------------------------
-- Table structure for tao_upgrade_auth
-- ----------------------------
DROP TABLE IF EXISTS `tao_upgrade_auth`;
CREATE TABLE `tao_upgrade_auth` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`user` varchar(20) NOT NULL COMMENT '用户',
`domain` varchar(30) NOT NULL COMMENT '域名',
`key` varchar(60) NOT NULL COMMENT '授权秘钥',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态',
`auth_level` tinyint(1) NOT NULL DEFAULT '0' COMMENT '授权等级0无授权1初级2中级3高级',
`end_time` int(11) NOT NULL DEFAULT '0' COMMENT '结束时间',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tao_upgrade_auth
-- ----------------------------
INSERT INTO `tao_upgrade_auth` VALUES ('1', 'admin', 'http://www.tp6.com', '9ee40f0c4f5c8f2f10b06ae2e1ddda96ac709c4a', '1', '0', '0', '0', '0', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('2', 'tao', 'http://www.tp6.com', '123456', '1', '1', '1577721600', '0', '1577172802', '1577172802');
INSERT INTO `tao_upgrade_auth` VALUES ('3', 'admin', 'https://www.tp.com', 'e49183beee30d0b463fbf415d63cce3908d95599', '1', '0', '0', '1576835663', '1583765865', '1583765865');
INSERT INTO `tao_upgrade_auth` VALUES ('4', 'admin', 'https://www.tp6.com', '9ee40f0c4f5c8f2f10b06ae2e1ddda96ac709c4a', '1', '1', '0', '1576835915', '1576835915', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('5', 'admin', 'http://www.baidu.com', 'fd27553322b3ed27ff7114b1c540901d36ac1ef8', '1', '0', '0', '1576836110', '1576836110', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('6', 'admin', 'https://www.taobao.com', 'b5d63bc7ae0d86c4d4019e2aea8d828f06818cc7', '1', '1', '0', '1576836142', '1583765908', '1583765908');
INSERT INTO `tao_upgrade_auth` VALUES ('7', 'admin', 'http://www.taobao.com', '4931b81d82673528828d2fd64a0414e8925c9221', '1', '0', '0', '1576836211', '1583765821', '1583765821');
INSERT INTO `tao_upgrade_auth` VALUES ('8', 'admin', 'http://qianniu.com', '0106c5c4f8e0a1d97745353bee6201783d481ac2', '1', '1', '0', '1576836529', '1583765837', '1583765837');
INSERT INTO `tao_upgrade_auth` VALUES ('9', 'admin', 'http://baidu.com', '4ce7a1d87218353d09081a291f38ddb290b0630b', '1', '0', '0', '1576836712', '1583765886', '1583765886');
INSERT INTO `tao_upgrade_auth` VALUES ('10', 'zhao', 'http://tao.tp6.com', '374f2e2a63f1201924a07561095cd078acae238b', '1', '1', '0', '1576837200', '1576837200', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('11', 'ZhiQ', 'http://www.hicheng.cn', '20b32d07aa9c2fb24afed0bf72f420144928fd22', '1', '0', '0', '1579012640', '1579012640', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('12', 'ZhiQ', 'https://www.hicheng.cn', '9a2e0b92f54238760c48d6021adba6e20c9ede0a', '1', '0', '0', '1579012652', '1579012652', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('13', 'lingkur', 'http://demo.biudj.com', '15eacf288cc4e8a1a9b69da3338607d0710b8cd1', '1', '0', '0', '1579455284', '1579455284', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('14', '云飞', 'https://www.cqtl520.com', 'db88afaedaacc1cabc15013dd3ea5f412f6086c9', '1', '0', '0', '1579665257', '1579665257', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('15', '123', 'http://http://www.aieok.com/', '13971a9975a4e4eb9827a01767a2796c68e03b69', '1', '0', '0', '1583659119', '1583659119', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('16', '22553456', 'http://www.srsn.com', 'fb86db60328ada7c0180a3f32765777dc4250a7f', '1', '0', '0', '1584153862', '1584153862', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('17', 'maqiang', 'https://www.wujiangpu.com', 'b4c22df2a87ecd0524b90cf8d56eeadeba58a8a1', '1', '0', '0', '1584278073', '1584278073', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('18', 'admin', 'https://www.igoke.cn', '8e8a3c05508f853fb06e3d5accd927d949194971', '1', '0', '0', '1585382531', '1590487273', '1590487273');
INSERT INTO `tao_upgrade_auth` VALUES ('19', 'tt', 'http://www.tt.com', 'ff9f48057c831cb5db3af907b799b754f0499050', '1', '0', '2020', '1590486647', '1590487269', '1590487269');
INSERT INTO `tao_upgrade_auth` VALUES ('20', 'dfdf', 'http://wwerw.com', '1675905f7042fcdbca2c2de43ba79827ee62631f', '1', '0', '2020', '1590486715', '1590486715', '0');
INSERT INTO `tao_upgrade_auth` VALUES ('21', 'fdfdf', 'dfdfdsf', 'cb71fef668253fe6b2761f10500af9440acdcd8d', '1', '0', '2020', '1590486752', '1590487269', '1590487269');
INSERT INTO `tao_upgrade_auth` VALUES ('22', 'fdfdf', 'http://wwwe.com', '1db68d6d7d0cb9fd44ad51e22611680f3aa26a7d', '1', '0', '1590854400', '1590486950', '1590486950', '0');
-- ----------------------------
-- Table structure for tao_user
@ -569,6 +763,30 @@ CREATE TABLE `tao_user_zan` (
-- Records of tao_user_zan
-- ----------------------------
-- ----------------------------
-- Table structure for tao_version
-- ----------------------------
DROP TABLE IF EXISTS `tao_version`;
CREATE TABLE `tao_version` (
`id` int(5) unsigned NOT NULL AUTO_INCREMENT,
`version_name` varchar(20) NOT NULL COMMENT '版本名称',
`version_src` varchar(70) NOT NULL DEFAULT '' COMMENT '版本文件路径',
`version_resume` varchar(255) NOT NULL DEFAULT '' COMMENT '简介',
`version_status` enum('0','1') NOT NULL DEFAULT '1' COMMENT '1开启0禁止',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`delete_time` int(11) NOT NULL DEFAULT '0' COMMENT '删除时间',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tao_version
-- ----------------------------
INSERT INTO `tao_version` VALUES ('1', '1.1.1', '/storage/version/20191215/536c65fc4df42100016fa3d97b584d26.zip', '第1个版本', '1', '1575862901', '0', '1575864587');
INSERT INTO `tao_version` VALUES ('2', '1.1.2', '/storage/version/20191215/832e150dfbc0e88e04a408e475bce8bb.zip', '第2个版本', '1', '1575862901', '0', '1575864587');
INSERT INTO `tao_version` VALUES ('3', '1.1.3', '/storage/version/20191215/9ff1153045f1ad1e26c74aad148bdde3.zip', '第3个版本', '1', '1575862901', '1575862901', '1575864587');
INSERT INTO `tao_version` VALUES ('4', '1.1.4', '/storage/version/20191209/1fae8a15fcd41181490a0c02e0218ef1.zip', '第四个版本', '1', '1575864450', '1575864587', '1575864587');
-- ----------------------------
-- Table structure for tao_webconfig
-- ----------------------------

View File

@ -0,0 +1,33 @@
<?php
namespace app\middleware;
use think\facade\Session;
use think\facade\Cookie;
use think\facade\Db;
use think\facade\Config;
class AdminLoginCookie
{
public function handle($request, \Closure $next)
{
//登陆前获取加密的Cookie
$cooAuth = Cookie::get('adminAuth');
if(!empty($cooAuth)){
$resArr = explode(':',$cooAuth);
$userId = end($resArr);
//检验用户
$user = Db::name('admin')->where('id',$userId)->find();
if(!is_null($user)){
//验证cookie
$salt = Config::get('taoler.salt');
$auth = md5($user['username'].$salt).":".$userId;
if($auth==$cooAuth){
Session::set('admin_name',$user['username']);
Session::set('admin_id',$userId);
}
}
}
return $next($request);
}
}

View File

@ -31,7 +31,7 @@ class Auth
}
// 排除公共权限
$not_check = ['admin/login/index','admin/index/index','admin/index/home','admin/Set/info','admin/Set/password','admin/Admin/logout','admin/captcha'];
$not_check = ['admin/','admin/login/index','admin/index/index','admin/index/home','admin/Admin/info','admin/Admin/repass','admin/Admin/logout','admin/captcha'];
if (!in_array($path, $not_check)) {
$auth = new UserAuth();
@ -39,8 +39,6 @@ class Auth
if (!$auth->check($path, $admin_id) && $admin_id != 1) {
return view('public/auth');
//return json(['status'=>-1,'msg'=>'没有权限!']);
//return response("<script> alert('没有权限!'); </script>");
}
}
return $next($request);

View File

@ -25,7 +25,8 @@
"topthink/think-captcha": "^3.0",
"phpmailer/phpmailer": "^6.1",
"zzstudio/think-addons": "^2.0",
"firebase/php-jwt": "^5.2"
"firebase/php-jwt": "^5.2",
"lotofbadcode/phpspirit_databackup": "^1.1"
},
"require-dev": {
"symfony/var-dumper": "^4.2",

249
composer.lock generated
View File

@ -4,8 +4,68 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "670826f4ed6fc63b8b224456dd1826d9",
"content-hash": "f4ac487289cab0dba8660f5759f64a21",
"packages": [
{
"name": "firebase/php-jwt",
"version": "v5.2.0",
"source": {
"type": "git",
"url": "https://github.com/firebase/php-jwt.git",
"reference": "feb0e820b8436873675fd3aca04f3728eb2185cb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/feb0e820b8436873675fd3aca04f3728eb2185cb",
"reference": "feb0e820b8436873675fd3aca04f3728eb2185cb",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": ">=4.8 <=9"
},
"type": "library",
"autoload": {
"psr-4": {
"Firebase\\JWT\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Neuman Vong",
"email": "neuman+pear@twilio.com",
"role": "Developer"
},
{
"name": "Anant Narayanan",
"email": "anant@php.net",
"role": "Developer"
}
],
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
"homepage": "https://github.com/firebase/php-jwt",
"keywords": [
"jwt",
"php"
],
"support": {
"issues": "https://github.com/firebase/php-jwt/issues",
"source": "https://github.com/firebase/php-jwt/tree/master"
},
"time": "2020-03-25T18:49:23+00:00"
},
{
"name": "league/flysystem",
"version": "1.1.3",
@ -166,16 +226,16 @@
},
{
"name": "league/mime-type-detection",
"version": "1.5.1",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git",
"reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa"
"reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/353f66d7555d8a90781f6f5e7091932f9a4250aa",
"reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa",
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
"reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
"shasum": "",
"mirrors": [
{
@ -189,8 +249,9 @@
"php": "^7.2 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^0.12.36",
"phpunit/phpunit": "^8.5.8"
"friendsofphp/php-cs-fixer": "^2.18",
"phpstan/phpstan": "^0.12.68",
"phpunit/phpunit": "^8.5.8 || ^9.3"
},
"type": "library",
"autoload": {
@ -211,7 +272,7 @@
"description": "Mime-type detection for Flysystem",
"support": {
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.5.1"
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0"
},
"funding": [
{
@ -223,20 +284,70 @@
"type": "tidelift"
}
],
"time": "2020-10-18T11:50:25+00:00"
"time": "2021-01-18T20:58:21+00:00"
},
{
"name": "phpmailer/phpmailer",
"version": "v6.1.7",
"name": "lotofbadcode/phpspirit_databackup",
"version": "v1.1",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0"
"url": "https://github.com/lotofbadcode/phpspirit_databackup.git",
"reference": "2627b2e4206031731c94c8d637fb06b3b96e8860"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
"reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
"url": "https://api.github.com/repos/lotofbadcode/phpspirit_databackup/zipball/2627b2e4206031731c94c8d637fb06b3b96e8860",
"reference": "2627b2e4206031731c94c8d637fb06b3b96e8860",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
},
"require": {
"php": ">=7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"phpspirit\\databackup\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "代码庸医",
"email": "3359964266@qq.com"
}
],
"description": "一个PHP数据库备份恢复的插件",
"keywords": [
"library",
"php"
],
"support": {
"issues": "https://github.com/lotofbadcode/phpspirit_databackup/issues",
"source": "https://github.com/lotofbadcode/phpspirit_databackup/tree/v1.1"
},
"time": "2020-10-18T08:14:55+00:00"
},
{
"name": "phpmailer/phpmailer",
"version": "v6.2.0",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "e38888a75c070304ca5514197d4847a59a5c853f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e38888a75c070304ca5514197d4847a59a5c853f",
"reference": "e38888a75c070304ca5514197d4847a59a5c853f",
"shasum": "",
"mirrors": [
{
@ -248,12 +359,16 @@
"require": {
"ext-ctype": "*",
"ext-filter": "*",
"ext-hash": "*",
"php": ">=5.5.0"
},
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
"doctrine/annotations": "^1.2",
"friendsofphp/php-cs-fixer": "^2.2",
"phpunit/phpunit": "^4.8 || ^5.7"
"phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.5.6",
"yoast/phpunit-polyfills": "^0.2.0"
},
"suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset",
@ -293,15 +408,15 @@
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"support": {
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.1.7"
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.2.0"
},
"funding": [
{
"url": "https://github.com/synchro",
"url": "https://github.com/Synchro",
"type": "github"
}
],
"time": "2020-07-14T18:50:27+00:00"
"time": "2020-11-25T15:24:57+00:00"
},
{
"name": "psr/cache",
@ -591,16 +706,16 @@
},
{
"name": "topthink/framework",
"version": "v6.0.5",
"version": "v6.0.7",
"source": {
"type": "git",
"url": "https://github.com/top-think/framework.git",
"reference": "85625d984f5c96699dc27d384869f206c3aec1cc"
"reference": "db8fe22520a9660dd5e4c87e304034ac49e39270"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/top-think/framework/zipball/85625d984f5c96699dc27d384869f206c3aec1cc",
"reference": "85625d984f5c96699dc27d384869f206c3aec1cc",
"url": "https://api.github.com/repos/top-think/framework/zipball/db8fe22520a9660dd5e4c87e304034ac49e39270",
"reference": "db8fe22520a9660dd5e4c87e304034ac49e39270",
"shasum": "",
"mirrors": [
{
@ -656,9 +771,9 @@
],
"support": {
"issues": "https://github.com/top-think/framework/issues",
"source": "https://github.com/top-think/framework/tree/v6.0.5"
"source": "https://github.com/top-think/framework/tree/v6.0.7"
},
"time": "2020-10-26T07:18:00+00:00"
"time": "2021-01-25T14:48:29+00:00"
},
{
"name": "topthink/think-captcha",
@ -824,16 +939,16 @@
},
{
"name": "topthink/think-orm",
"version": "v2.0.34",
"version": "v2.0.36",
"source": {
"type": "git",
"url": "https://github.com/top-think/think-orm.git",
"reference": "57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629"
"reference": "f48dc09050f25029d41a66bfc9c3c403e4f82024"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-orm/zipball/57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629",
"reference": "57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629",
"url": "https://api.github.com/repos/top-think/think-orm/zipball/f48dc09050f25029d41a66bfc9c3c403e4f82024",
"reference": "f48dc09050f25029d41a66bfc9c3c403e4f82024",
"shasum": "",
"mirrors": [
{
@ -873,22 +988,22 @@
],
"support": {
"issues": "https://github.com/top-think/think-orm/issues",
"source": "https://github.com/top-think/think-orm/tree/v2.0.34"
"source": "https://github.com/top-think/think-orm/tree/v2.0.36"
},
"time": "2020-09-28T08:24:57+00:00"
"time": "2021-01-12T09:08:52+00:00"
},
{
"name": "topthink/think-template",
"version": "v2.0.7",
"version": "v2.0.8",
"source": {
"type": "git",
"url": "https://github.com/top-think/think-template.git",
"reference": "e98bdbb4a4c94b442f17dfceba81e0134d4fbd19"
"reference": "abfc293f74f9ef5127b5c416310a01fe42e59368"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-template/zipball/e98bdbb4a4c94b442f17dfceba81e0134d4fbd19",
"reference": "e98bdbb4a4c94b442f17dfceba81e0134d4fbd19",
"url": "https://api.github.com/repos/top-think/think-template/zipball/abfc293f74f9ef5127b5c416310a01fe42e59368",
"reference": "abfc293f74f9ef5127b5c416310a01fe42e59368",
"shasum": "",
"mirrors": [
{
@ -920,9 +1035,9 @@
"description": "the php template engine",
"support": {
"issues": "https://github.com/top-think/think-template/issues",
"source": "https://github.com/top-think/think-template/tree/v2.0.7"
"source": "https://github.com/top-think/think-template/tree/v2.0.8"
},
"time": "2019-09-20T15:31:04+00:00"
"time": "2020-12-10T07:52:03+00:00"
},
{
"name": "topthink/think-view",
@ -1037,16 +1152,16 @@
"packages-dev": [
{
"name": "symfony/polyfill-mbstring",
"version": "v1.20.0",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531"
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531",
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
"shasum": "",
"mirrors": [
{
@ -1064,7 +1179,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.20-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -1103,7 +1218,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0"
},
"funding": [
{
@ -1119,20 +1234,20 @@
"type": "tidelift"
}
],
"time": "2020-10-23T14:02:19+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-php72",
"version": "v1.20.0",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930"
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930",
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
"shasum": "",
"mirrors": [
{
@ -1147,7 +1262,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.20-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -1185,7 +1300,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0"
"source": "https://github.com/symfony/polyfill-php72/tree/v1.22.0"
},
"funding": [
{
@ -1201,20 +1316,20 @@
"type": "tidelift"
}
],
"time": "2020-10-23T14:02:19+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.20.0",
"version": "v1.22.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de"
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
"shasum": "",
"mirrors": [
{
@ -1229,7 +1344,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.20-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -1274,7 +1389,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0"
},
"funding": [
{
@ -1290,20 +1405,20 @@
"type": "tidelift"
}
],
"time": "2020-10-23T14:02:19+00:00"
"time": "2021-01-07T16:49:33+00:00"
},
{
"name": "symfony/var-dumper",
"version": "v4.4.16",
"version": "v4.4.19",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "3718e18b68d955348ad860e505991802c09f5f73"
"reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/3718e18b68d955348ad860e505991802c09f5f73",
"reference": "3718e18b68d955348ad860e505991802c09f5f73",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/a1eab2f69906dc83c5ddba4632180260d0ab4f7f",
"reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f",
"shasum": "",
"mirrors": [
{
@ -1326,7 +1441,7 @@
"ext-iconv": "*",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/process": "^4.4|^5.0",
"twig/twig": "^1.34|^2.4|^3.0"
"twig/twig": "^1.43|^2.13|^3.0.4"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
@ -1362,14 +1477,14 @@
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony mechanism for exploring and dumping PHP variables",
"description": "Provides mechanisms for walking through any arbitrary PHP variable",
"homepage": "https://symfony.com",
"keywords": [
"debug",
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v4.4.16"
"source": "https://github.com/symfony/var-dumper/tree/v4.4.19"
},
"funding": [
{
@ -1385,7 +1500,7 @@
"type": "tidelift"
}
],
"time": "2020-10-26T20:47:51+00:00"
"time": "2021-01-27T09:09:26+00:00"
},
{
"name": "topthink/think-trace",

View File

@ -33,7 +33,7 @@ return [
// 错误显示信息,非调试模式有效
'error_message' => '页面错误!请稍后再试~',
// 显示错误信息
'show_error_msg' => true,
'show_error_msg' => false,
//异常页面模板
'http_exception_template' => [
404 => '../view/404.html',

View File

@ -5,6 +5,6 @@
return [
//版本配置
'version' => '1.6.5',
'version' => '1.6.6',
'salt' => 'taoler'
];

View File

@ -20,10 +20,19 @@ private static $installed = array (
array (
),
'reference' => NULL,
'name' => 'topthink/think',
'name' => 'taoser/taoler',
),
'versions' =>
array (
'firebase/php-jwt' =>
array (
'pretty_version' => 'v5.2.0',
'version' => '5.2.0.0',
'aliases' =>
array (
),
'reference' => 'feb0e820b8436873675fd3aca04f3728eb2185cb',
),
'league/flysystem' =>
array (
'pretty_version' => '1.1.3',
@ -44,21 +53,30 @@ private static $installed = array (
),
'league/mime-type-detection' =>
array (
'pretty_version' => '1.5.1',
'version' => '1.5.1.0',
'pretty_version' => '1.7.0',
'version' => '1.7.0.0',
'aliases' =>
array (
),
'reference' => '353f66d7555d8a90781f6f5e7091932f9a4250aa',
'reference' => '3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3',
),
'lotofbadcode/phpspirit_databackup' =>
array (
'pretty_version' => 'v1.1',
'version' => '1.1.0.0',
'aliases' =>
array (
),
'reference' => '2627b2e4206031731c94c8d637fb06b3b96e8860',
),
'phpmailer/phpmailer' =>
array (
'pretty_version' => 'v6.1.7',
'version' => '6.1.7.0',
'pretty_version' => 'v6.2.0',
'version' => '6.2.0.0',
'aliases' =>
array (
),
'reference' => '2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0',
'reference' => 'e38888a75c070304ca5514197d4847a59a5c853f',
),
'psr/cache' =>
array (
@ -98,39 +116,48 @@ private static $installed = array (
),
'symfony/polyfill-mbstring' =>
array (
'pretty_version' => 'v1.20.0',
'version' => '1.20.0.0',
'pretty_version' => 'v1.22.0',
'version' => '1.22.0.0',
'aliases' =>
array (
),
'reference' => '39d483bdf39be819deabf04ec872eb0b2410b531',
'reference' => 'f377a3dd1fde44d37b9831d68dc8dea3ffd28e13',
),
'symfony/polyfill-php72' =>
array (
'pretty_version' => 'v1.20.0',
'version' => '1.20.0.0',
'pretty_version' => 'v1.22.0',
'version' => '1.22.0.0',
'aliases' =>
array (
),
'reference' => 'cede45fcdfabdd6043b3592e83678e42ec69e930',
'reference' => 'cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9',
),
'symfony/polyfill-php80' =>
array (
'pretty_version' => 'v1.20.0',
'version' => '1.20.0.0',
'pretty_version' => 'v1.22.0',
'version' => '1.22.0.0',
'aliases' =>
array (
),
'reference' => 'e70aa8b064c5b72d3df2abd5ab1e90464ad009de',
'reference' => 'dc3063ba22c2a1fd2f45ed856374d79114998f91',
),
'symfony/var-dumper' =>
array (
'pretty_version' => 'v4.4.16',
'version' => '4.4.16.0',
'pretty_version' => 'v4.4.19',
'version' => '4.4.19.0',
'aliases' =>
array (
),
'reference' => '3718e18b68d955348ad860e505991802c09f5f73',
'reference' => 'a1eab2f69906dc83c5ddba4632180260d0ab4f7f',
),
'taoser/taoler' =>
array (
'pretty_version' => '1.0.0+no-version-set',
'version' => '1.0.0.0',
'aliases' =>
array (
),
'reference' => NULL,
),
'taoser/think-auth' =>
array (
@ -143,21 +170,12 @@ private static $installed = array (
),
'topthink/framework' =>
array (
'pretty_version' => 'v6.0.5',
'version' => '6.0.5.0',
'pretty_version' => 'v6.0.7',
'version' => '6.0.7.0',
'aliases' =>
array (
),
'reference' => '85625d984f5c96699dc27d384869f206c3aec1cc',
),
'topthink/think' =>
array (
'pretty_version' => '1.0.0+no-version-set',
'version' => '1.0.0.0',
'aliases' =>
array (
),
'reference' => NULL,
'reference' => 'db8fe22520a9660dd5e4c87e304034ac49e39270',
),
'topthink/think-captcha' =>
array (
@ -188,21 +206,21 @@ private static $installed = array (
),
'topthink/think-orm' =>
array (
'pretty_version' => 'v2.0.34',
'version' => '2.0.34.0',
'pretty_version' => 'v2.0.36',
'version' => '2.0.36.0',
'aliases' =>
array (
),
'reference' => '57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629',
'reference' => 'f48dc09050f25029d41a66bfc9c3c403e4f82024',
),
'topthink/think-template' =>
array (
'pretty_version' => 'v2.0.7',
'version' => '2.0.7.0',
'pretty_version' => 'v2.0.8',
'version' => '2.0.8.0',
'aliases' =>
array (
),
'reference' => 'e98bdbb4a4c94b442f17dfceba81e0134d4fbd19',
'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368',
),
'topthink/think-trace' =>
array (

View File

@ -12,6 +12,7 @@ return array(
'think\\app\\' => array($vendorDir . '/topthink/think-multi-app/src'),
'think\\' => array($vendorDir . '/topthink/framework/src/think', $vendorDir . '/topthink/think-helper/src', $vendorDir . '/topthink/think-orm/src', $vendorDir . '/topthink/think-template/src', $vendorDir . '/zzstudio/think-addons/src'),
'taoser\\think\\' => array($vendorDir . '/taoser/think-auth/src'),
'phpspirit\\databackup\\' => array($vendorDir . '/lotofbadcode/phpspirit_databackup/src'),
'app\\' => array($baseDir . '/app'),
'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'),
@ -25,4 +26,5 @@ return array(
'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'),
'League\\Flysystem\\Cached\\' => array($vendorDir . '/league/flysystem-cached-adapter/src'),
'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'),
'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'),
);

View File

@ -26,6 +26,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
'think\\' => 6,
'taoser\\think\\' => 13,
),
'p' =>
array (
'phpspirit\\databackup\\' => 21,
),
'a' =>
array (
'app\\' => 4,
@ -51,6 +55,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
'League\\Flysystem\\Cached\\' => 24,
'League\\Flysystem\\' => 17,
),
'F' =>
array (
'Firebase\\JWT\\' => 13,
),
);
public static $prefixDirsPsr4 = array (
@ -82,6 +90,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
array (
0 => __DIR__ . '/..' . '/taoser/think-auth/src',
),
'phpspirit\\databackup\\' =>
array (
0 => __DIR__ . '/..' . '/lotofbadcode/phpspirit_databackup/src',
),
'app\\' =>
array (
0 => __DIR__ . '/../..' . '/app',
@ -134,6 +146,10 @@ class ComposerStaticInit1b32198725235c8d6500c87262ef30c2
array (
0 => __DIR__ . '/..' . '/league/flysystem/src',
),
'Firebase\\JWT\\' =>
array (
0 => __DIR__ . '/..' . '/firebase/php-jwt/src',
),
);
public static $fallbackDirsPsr0 = array (

View File

@ -1,5 +1,68 @@
{
"packages": [
{
"name": "firebase/php-jwt",
"version": "v5.2.0",
"version_normalized": "5.2.0.0",
"source": {
"type": "git",
"url": "https://github.com/firebase/php-jwt.git",
"reference": "feb0e820b8436873675fd3aca04f3728eb2185cb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/firebase/php-jwt/zipball/feb0e820b8436873675fd3aca04f3728eb2185cb",
"reference": "feb0e820b8436873675fd3aca04f3728eb2185cb",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": ">=4.8 <=9"
},
"time": "2020-03-25T18:49:23+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"Firebase\\JWT\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Neuman Vong",
"email": "neuman+pear@twilio.com",
"role": "Developer"
},
{
"name": "Anant Narayanan",
"email": "anant@php.net",
"role": "Developer"
}
],
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
"homepage": "https://github.com/firebase/php-jwt",
"keywords": [
"jwt",
"php"
],
"support": {
"issues": "https://github.com/firebase/php-jwt/issues",
"source": "https://github.com/firebase/php-jwt/tree/master"
},
"install-path": "../firebase/php-jwt"
},
{
"name": "league/flysystem",
"version": "1.1.3",
@ -152,17 +215,17 @@
},
{
"name": "league/mime-type-detection",
"version": "1.5.1",
"version_normalized": "1.5.1.0",
"version": "1.7.0",
"version_normalized": "1.7.0.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git",
"reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa"
"reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/353f66d7555d8a90781f6f5e7091932f9a4250aa",
"reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa",
"url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
"reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3",
"shasum": "",
"mirrors": [
{
@ -176,10 +239,11 @@
"php": "^7.2 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^0.12.36",
"phpunit/phpunit": "^8.5.8"
"friendsofphp/php-cs-fixer": "^2.18",
"phpstan/phpstan": "^0.12.68",
"phpunit/phpunit": "^8.5.8 || ^9.3"
},
"time": "2020-10-18T11:50:25+00:00",
"time": "2021-01-18T20:58:21+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -200,7 +264,7 @@
"description": "Mime-type detection for Flysystem",
"support": {
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.5.1"
"source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0"
},
"funding": [
{
@ -215,18 +279,71 @@
"install-path": "../league/mime-type-detection"
},
{
"name": "phpmailer/phpmailer",
"version": "v6.1.7",
"version_normalized": "6.1.7.0",
"name": "lotofbadcode/phpspirit_databackup",
"version": "v1.1",
"version_normalized": "1.1.0.0",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0"
"url": "https://github.com/lotofbadcode/phpspirit_databackup.git",
"reference": "2627b2e4206031731c94c8d637fb06b3b96e8860"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
"reference": "2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0",
"url": "https://api.github.com/repos/lotofbadcode/phpspirit_databackup/zipball/2627b2e4206031731c94c8d637fb06b3b96e8860",
"reference": "2627b2e4206031731c94c8d637fb06b3b96e8860",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
},
"require": {
"php": ">=7.0"
},
"time": "2020-10-18T08:14:55+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"phpspirit\\databackup\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "代码庸医",
"email": "3359964266@qq.com"
}
],
"description": "一个PHP数据库备份恢复的插件",
"keywords": [
"library",
"php"
],
"support": {
"issues": "https://github.com/lotofbadcode/phpspirit_databackup/issues",
"source": "https://github.com/lotofbadcode/phpspirit_databackup/tree/v1.1"
},
"install-path": "../lotofbadcode/phpspirit_databackup"
},
{
"name": "phpmailer/phpmailer",
"version": "v6.2.0",
"version_normalized": "6.2.0.0",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "e38888a75c070304ca5514197d4847a59a5c853f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e38888a75c070304ca5514197d4847a59a5c853f",
"reference": "e38888a75c070304ca5514197d4847a59a5c853f",
"shasum": "",
"mirrors": [
{
@ -238,12 +355,16 @@
"require": {
"ext-ctype": "*",
"ext-filter": "*",
"ext-hash": "*",
"php": ">=5.5.0"
},
"require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
"doctrine/annotations": "^1.2",
"friendsofphp/php-cs-fixer": "^2.2",
"phpunit/phpunit": "^4.8 || ^5.7"
"phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.5.6",
"yoast/phpunit-polyfills": "^0.2.0"
},
"suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset",
@ -253,7 +374,7 @@
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
},
"time": "2020-07-14T18:50:27+00:00",
"time": "2020-11-25T15:24:57+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -285,11 +406,11 @@
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"support": {
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.1.7"
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.2.0"
},
"funding": [
{
"url": "https://github.com/synchro",
"url": "https://github.com/Synchro",
"type": "github"
}
],
@ -523,17 +644,17 @@
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.20.0",
"version_normalized": "1.20.0.0",
"version": "v1.22.0",
"version_normalized": "1.22.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531"
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531",
"reference": "39d483bdf39be819deabf04ec872eb0b2410b531",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
"reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
"shasum": "",
"mirrors": [
{
@ -548,11 +669,11 @@
"suggest": {
"ext-mbstring": "For best performance"
},
"time": "2020-10-23T14:02:19+00:00",
"time": "2021-01-07T16:49:33+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.20-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -592,7 +713,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0"
},
"funding": [
{
@ -612,17 +733,17 @@
},
{
"name": "symfony/polyfill-php72",
"version": "v1.20.0",
"version_normalized": "1.20.0.0",
"version": "v1.22.0",
"version_normalized": "1.22.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930"
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930",
"reference": "cede45fcdfabdd6043b3592e83678e42ec69e930",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
"reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
"shasum": "",
"mirrors": [
{
@ -634,11 +755,11 @@
"require": {
"php": ">=7.1"
},
"time": "2020-10-23T14:02:19+00:00",
"time": "2021-01-07T16:49:33+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.20-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -677,7 +798,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0"
"source": "https://github.com/symfony/polyfill-php72/tree/v1.22.0"
},
"funding": [
{
@ -697,17 +818,17 @@
},
{
"name": "symfony/polyfill-php80",
"version": "v1.20.0",
"version_normalized": "1.20.0.0",
"version": "v1.22.0",
"version_normalized": "1.22.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de"
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
"reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
"reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
"shasum": "",
"mirrors": [
{
@ -719,11 +840,11 @@
"require": {
"php": ">=7.1"
},
"time": "2020-10-23T14:02:19+00:00",
"time": "2021-01-07T16:49:33+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.20-dev"
"dev-main": "1.22-dev"
},
"thanks": {
"name": "symfony/polyfill",
@ -769,7 +890,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0"
"source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0"
},
"funding": [
{
@ -789,17 +910,17 @@
},
{
"name": "symfony/var-dumper",
"version": "v4.4.16",
"version_normalized": "4.4.16.0",
"version": "v4.4.19",
"version_normalized": "4.4.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "3718e18b68d955348ad860e505991802c09f5f73"
"reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/3718e18b68d955348ad860e505991802c09f5f73",
"reference": "3718e18b68d955348ad860e505991802c09f5f73",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/a1eab2f69906dc83c5ddba4632180260d0ab4f7f",
"reference": "a1eab2f69906dc83c5ddba4632180260d0ab4f7f",
"shasum": "",
"mirrors": [
{
@ -822,14 +943,14 @@
"ext-iconv": "*",
"symfony/console": "^3.4|^4.0|^5.0",
"symfony/process": "^4.4|^5.0",
"twig/twig": "^1.34|^2.4|^3.0"
"twig/twig": "^1.43|^2.13|^3.0.4"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
"ext-intl": "To show region name in time zone dump",
"symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
},
"time": "2020-10-26T20:47:51+00:00",
"time": "2021-01-27T09:09:26+00:00",
"bin": [
"Resources/bin/var-dump-server"
],
@ -860,14 +981,14 @@
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony mechanism for exploring and dumping PHP variables",
"description": "Provides mechanisms for walking through any arbitrary PHP variable",
"homepage": "https://symfony.com",
"keywords": [
"debug",
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v4.4.16"
"source": "https://github.com/symfony/var-dumper/tree/v4.4.19"
},
"funding": [
{
@ -945,17 +1066,17 @@
},
{
"name": "topthink/framework",
"version": "v6.0.5",
"version_normalized": "6.0.5.0",
"version": "v6.0.7",
"version_normalized": "6.0.7.0",
"source": {
"type": "git",
"url": "https://github.com/top-think/framework.git",
"reference": "85625d984f5c96699dc27d384869f206c3aec1cc"
"reference": "db8fe22520a9660dd5e4c87e304034ac49e39270"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/top-think/framework/zipball/85625d984f5c96699dc27d384869f206c3aec1cc",
"reference": "85625d984f5c96699dc27d384869f206c3aec1cc",
"url": "https://api.github.com/repos/top-think/framework/zipball/db8fe22520a9660dd5e4c87e304034ac49e39270",
"reference": "db8fe22520a9660dd5e4c87e304034ac49e39270",
"shasum": "",
"mirrors": [
{
@ -981,7 +1102,7 @@
"mockery/mockery": "^1.2",
"phpunit/phpunit": "^7.0"
},
"time": "2020-10-26T07:18:00+00:00",
"time": "2021-01-25T14:48:29+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -1013,7 +1134,7 @@
],
"support": {
"issues": "https://github.com/top-think/framework/issues",
"source": "https://github.com/top-think/framework/tree/v6.0.5"
"source": "https://github.com/top-think/framework/tree/v6.0.7"
},
"install-path": "../topthink/framework"
},
@ -1178,17 +1299,17 @@
},
{
"name": "topthink/think-orm",
"version": "v2.0.34",
"version_normalized": "2.0.34.0",
"version": "v2.0.36",
"version_normalized": "2.0.36.0",
"source": {
"type": "git",
"url": "https://github.com/top-think/think-orm.git",
"reference": "57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629"
"reference": "f48dc09050f25029d41a66bfc9c3c403e4f82024"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-orm/zipball/57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629",
"reference": "57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629",
"url": "https://api.github.com/repos/top-think/think-orm/zipball/f48dc09050f25029d41a66bfc9c3c403e4f82024",
"reference": "f48dc09050f25029d41a66bfc9c3c403e4f82024",
"shasum": "",
"mirrors": [
{
@ -1204,7 +1325,7 @@
"psr/simple-cache": "^1.0",
"topthink/think-helper": "^3.1"
},
"time": "2020-09-28T08:24:57+00:00",
"time": "2021-01-12T09:08:52+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -1228,21 +1349,25 @@
"database",
"orm"
],
"support": {
"issues": "https://github.com/top-think/think-orm/issues",
"source": "https://github.com/top-think/think-orm/tree/v2.0.36"
},
"install-path": "../topthink/think-orm"
},
{
"name": "topthink/think-template",
"version": "v2.0.7",
"version_normalized": "2.0.7.0",
"version": "v2.0.8",
"version_normalized": "2.0.8.0",
"source": {
"type": "git",
"url": "https://github.com/top-think/think-template.git",
"reference": "e98bdbb4a4c94b442f17dfceba81e0134d4fbd19"
"reference": "abfc293f74f9ef5127b5c416310a01fe42e59368"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/top-think/think-template/zipball/e98bdbb4a4c94b442f17dfceba81e0134d4fbd19",
"reference": "e98bdbb4a4c94b442f17dfceba81e0134d4fbd19",
"url": "https://api.github.com/repos/top-think/think-template/zipball/abfc293f74f9ef5127b5c416310a01fe42e59368",
"reference": "abfc293f74f9ef5127b5c416310a01fe42e59368",
"shasum": "",
"mirrors": [
{
@ -1255,7 +1380,7 @@
"php": ">=7.1.0",
"psr/simple-cache": "^1.0"
},
"time": "2019-09-20T15:31:04+00:00",
"time": "2020-12-10T07:52:03+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -1274,6 +1399,10 @@
}
],
"description": "the php template engine",
"support": {
"issues": "https://github.com/top-think/think-template/issues",
"source": "https://github.com/top-think/think-template/tree/v2.0.8"
},
"install-path": "../topthink/think-template"
},
{

View File

@ -7,10 +7,19 @@
array (
),
'reference' => NULL,
'name' => 'topthink/think',
'name' => 'taoser/taoler',
),
'versions' =>
array (
'firebase/php-jwt' =>
array (
'pretty_version' => 'v5.2.0',
'version' => '5.2.0.0',
'aliases' =>
array (
),
'reference' => 'feb0e820b8436873675fd3aca04f3728eb2185cb',
),
'league/flysystem' =>
array (
'pretty_version' => '1.1.3',
@ -31,21 +40,30 @@
),
'league/mime-type-detection' =>
array (
'pretty_version' => '1.5.1',
'version' => '1.5.1.0',
'pretty_version' => '1.7.0',
'version' => '1.7.0.0',
'aliases' =>
array (
),
'reference' => '353f66d7555d8a90781f6f5e7091932f9a4250aa',
'reference' => '3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3',
),
'lotofbadcode/phpspirit_databackup' =>
array (
'pretty_version' => 'v1.1',
'version' => '1.1.0.0',
'aliases' =>
array (
),
'reference' => '2627b2e4206031731c94c8d637fb06b3b96e8860',
),
'phpmailer/phpmailer' =>
array (
'pretty_version' => 'v6.1.7',
'version' => '6.1.7.0',
'pretty_version' => 'v6.2.0',
'version' => '6.2.0.0',
'aliases' =>
array (
),
'reference' => '2c2370ba3df7034f9eb7b8f387c97b52b2ba5ad0',
'reference' => 'e38888a75c070304ca5514197d4847a59a5c853f',
),
'psr/cache' =>
array (
@ -85,39 +103,48 @@
),
'symfony/polyfill-mbstring' =>
array (
'pretty_version' => 'v1.20.0',
'version' => '1.20.0.0',
'pretty_version' => 'v1.22.0',
'version' => '1.22.0.0',
'aliases' =>
array (
),
'reference' => '39d483bdf39be819deabf04ec872eb0b2410b531',
'reference' => 'f377a3dd1fde44d37b9831d68dc8dea3ffd28e13',
),
'symfony/polyfill-php72' =>
array (
'pretty_version' => 'v1.20.0',
'version' => '1.20.0.0',
'pretty_version' => 'v1.22.0',
'version' => '1.22.0.0',
'aliases' =>
array (
),
'reference' => 'cede45fcdfabdd6043b3592e83678e42ec69e930',
'reference' => 'cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9',
),
'symfony/polyfill-php80' =>
array (
'pretty_version' => 'v1.20.0',
'version' => '1.20.0.0',
'pretty_version' => 'v1.22.0',
'version' => '1.22.0.0',
'aliases' =>
array (
),
'reference' => 'e70aa8b064c5b72d3df2abd5ab1e90464ad009de',
'reference' => 'dc3063ba22c2a1fd2f45ed856374d79114998f91',
),
'symfony/var-dumper' =>
array (
'pretty_version' => 'v4.4.16',
'version' => '4.4.16.0',
'pretty_version' => 'v4.4.19',
'version' => '4.4.19.0',
'aliases' =>
array (
),
'reference' => '3718e18b68d955348ad860e505991802c09f5f73',
'reference' => 'a1eab2f69906dc83c5ddba4632180260d0ab4f7f',
),
'taoser/taoler' =>
array (
'pretty_version' => '1.0.0+no-version-set',
'version' => '1.0.0.0',
'aliases' =>
array (
),
'reference' => NULL,
),
'taoser/think-auth' =>
array (
@ -130,21 +157,12 @@
),
'topthink/framework' =>
array (
'pretty_version' => 'v6.0.5',
'version' => '6.0.5.0',
'pretty_version' => 'v6.0.7',
'version' => '6.0.7.0',
'aliases' =>
array (
),
'reference' => '85625d984f5c96699dc27d384869f206c3aec1cc',
),
'topthink/think' =>
array (
'pretty_version' => '1.0.0+no-version-set',
'version' => '1.0.0.0',
'aliases' =>
array (
),
'reference' => NULL,
'reference' => 'db8fe22520a9660dd5e4c87e304034ac49e39270',
),
'topthink/think-captcha' =>
array (
@ -175,21 +193,21 @@
),
'topthink/think-orm' =>
array (
'pretty_version' => 'v2.0.34',
'version' => '2.0.34.0',
'pretty_version' => 'v2.0.36',
'version' => '2.0.36.0',
'aliases' =>
array (
),
'reference' => '57f9b98895b0ff4ae7b7b75e51456fd8cb8fb629',
'reference' => 'f48dc09050f25029d41a66bfc9c3c403e4f82024',
),
'topthink/think-template' =>
array (
'pretty_version' => 'v2.0.7',
'version' => '2.0.7.0',
'pretty_version' => 'v2.0.8',
'version' => '2.0.8.0',
'aliases' =>
array (
),
'reference' => 'e98bdbb4a4c94b442f17dfceba81e0134d4fbd19',
'reference' => 'abfc293f74f9ef5127b5c416310a01fe42e59368',
),
'topthink/think-trace' =>
array (

View File

@ -12,6 +12,7 @@ $missingExtensions = array();
extension_loaded('ctype') || $missingExtensions[] = 'ctype';
extension_loaded('fileinfo') || $missingExtensions[] = 'fileinfo';
extension_loaded('filter') || $missingExtensions[] = 'filter';
extension_loaded('hash') || $missingExtensions[] = 'hash';
extension_loaded('json') || $missingExtensions[] = 'json';
extension_loaded('mbstring') || $missingExtensions[] = 'mbstring';

30
vendor/firebase/php-jwt/LICENSE vendored Normal file
View File

@ -0,0 +1,30 @@
Copyright (c) 2011, Neuman Vong
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Neuman Vong nor the names of other
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

200
vendor/firebase/php-jwt/README.md vendored Normal file
View File

@ -0,0 +1,200 @@
[![Build Status](https://travis-ci.org/firebase/php-jwt.png?branch=master)](https://travis-ci.org/firebase/php-jwt)
[![Latest Stable Version](https://poser.pugx.org/firebase/php-jwt/v/stable)](https://packagist.org/packages/firebase/php-jwt)
[![Total Downloads](https://poser.pugx.org/firebase/php-jwt/downloads)](https://packagist.org/packages/firebase/php-jwt)
[![License](https://poser.pugx.org/firebase/php-jwt/license)](https://packagist.org/packages/firebase/php-jwt)
PHP-JWT
=======
A simple library to encode and decode JSON Web Tokens (JWT) in PHP, conforming to [RFC 7519](https://tools.ietf.org/html/rfc7519).
Installation
------------
Use composer to manage your dependencies and download PHP-JWT:
```bash
composer require firebase/php-jwt
```
Example
-------
```php
<?php
use \Firebase\JWT\JWT;
$key = "example_key";
$payload = array(
"iss" => "http://example.org",
"aud" => "http://example.com",
"iat" => 1356999524,
"nbf" => 1357000000
);
/**
* IMPORTANT:
* You must specify supported algorithms for your application. See
* https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
* for a list of spec-compliant algorithms.
*/
$jwt = JWT::encode($payload, $key);
$decoded = JWT::decode($jwt, $key, array('HS256'));
print_r($decoded);
/*
NOTE: This will now be an object instead of an associative array. To get
an associative array, you will need to cast it as such:
*/
$decoded_array = (array) $decoded;
/**
* You can add a leeway to account for when there is a clock skew times between
* the signing and verifying servers. It is recommended that this leeway should
* not be bigger than a few minutes.
*
* Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef
*/
JWT::$leeway = 60; // $leeway in seconds
$decoded = JWT::decode($jwt, $key, array('HS256'));
?>
```
Example with RS256 (openssl)
----------------------------
```php
<?php
use \Firebase\JWT\JWT;
$privateKey = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC8kGa1pSjbSYZVebtTRBLxBz5H4i2p/llLCrEeQhta5kaQu/Rn
vuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t0tyazyZ8JXw+KgXTxldMPEL9
5+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4ehde/zUxo6UvS7UrBQIDAQAB
AoGAb/MXV46XxCFRxNuB8LyAtmLDgi/xRnTAlMHjSACddwkyKem8//8eZtw9fzxz
bWZ/1/doQOuHBGYZU8aDzzj59FZ78dyzNFoF91hbvZKkg+6wGyd/LrGVEB+Xre0J
Nil0GReM2AHDNZUYRv+HYJPIOrB0CRczLQsgFJ8K6aAD6F0CQQDzbpjYdx10qgK1
cP59UHiHjPZYC0loEsk7s+hUmT3QHerAQJMZWC11Qrn2N+ybwwNblDKv+s5qgMQ5
5tNoQ9IfAkEAxkyffU6ythpg/H0Ixe1I2rd0GbF05biIzO/i77Det3n4YsJVlDck
ZkcvY3SK2iRIL4c9yY6hlIhs+K9wXTtGWwJBAO9Dskl48mO7woPR9uD22jDpNSwe
k90OMepTjzSvlhjbfuPN1IdhqvSJTDychRwn1kIJ7LQZgQ8fVz9OCFZ/6qMCQGOb
qaGwHmUK6xzpUbbacnYrIM6nLSkXgOAwv7XXCojvY614ILTK3iXiLBOxPu5Eu13k
eUz9sHyD6vkgZzjtxXECQAkp4Xerf5TGfQXGXhxIX52yH+N2LtujCdkQZjXAsGdm
B2zNzvrlgRmgBrklMTrMYgm1NPcW+bRLGcwgW2PTvNM=
-----END RSA PRIVATE KEY-----
EOD;
$publicKey = <<<EOD
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8kGa1pSjbSYZVebtTRBLxBz5H
4i2p/llLCrEeQhta5kaQu/RnvuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t
0tyazyZ8JXw+KgXTxldMPEL95+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4
ehde/zUxo6UvS7UrBQIDAQAB
-----END PUBLIC KEY-----
EOD;
$payload = array(
"iss" => "example.org",
"aud" => "example.com",
"iat" => 1356999524,
"nbf" => 1357000000
);
$jwt = JWT::encode($payload, $privateKey, 'RS256');
echo "Encode:\n" . print_r($jwt, true) . "\n";
$decoded = JWT::decode($jwt, $publicKey, array('RS256'));
/*
NOTE: This will now be an object instead of an associative array. To get
an associative array, you will need to cast it as such:
*/
$decoded_array = (array) $decoded;
echo "Decode:\n" . print_r($decoded_array, true) . "\n";
?>
```
Changelog
---------
#### 5.0.0 / 2017-06-26
- Support RS384 and RS512.
See [#117](https://github.com/firebase/php-jwt/pull/117). Thanks [@joostfaassen](https://github.com/joostfaassen)!
- Add an example for RS256 openssl.
See [#125](https://github.com/firebase/php-jwt/pull/125). Thanks [@akeeman](https://github.com/akeeman)!
- Detect invalid Base64 encoding in signature.
See [#162](https://github.com/firebase/php-jwt/pull/162). Thanks [@psignoret](https://github.com/psignoret)!
- Update `JWT::verify` to handle OpenSSL errors.
See [#159](https://github.com/firebase/php-jwt/pull/159). Thanks [@bshaffer](https://github.com/bshaffer)!
- Add `array` type hinting to `decode` method
See [#101](https://github.com/firebase/php-jwt/pull/101). Thanks [@hywak](https://github.com/hywak)!
- Add all JSON error types.
See [#110](https://github.com/firebase/php-jwt/pull/110). Thanks [@gbalduzzi](https://github.com/gbalduzzi)!
- Bugfix 'kid' not in given key list.
See [#129](https://github.com/firebase/php-jwt/pull/129). Thanks [@stampycode](https://github.com/stampycode)!
- Miscellaneous cleanup, documentation and test fixes.
See [#107](https://github.com/firebase/php-jwt/pull/107), [#115](https://github.com/firebase/php-jwt/pull/115),
[#160](https://github.com/firebase/php-jwt/pull/160), [#161](https://github.com/firebase/php-jwt/pull/161), and
[#165](https://github.com/firebase/php-jwt/pull/165). Thanks [@akeeman](https://github.com/akeeman),
[@chinedufn](https://github.com/chinedufn), and [@bshaffer](https://github.com/bshaffer)!
#### 4.0.0 / 2016-07-17
- Add support for late static binding. See [#88](https://github.com/firebase/php-jwt/pull/88) for details. Thanks to [@chappy84](https://github.com/chappy84)!
- Use static `$timestamp` instead of `time()` to improve unit testing. See [#93](https://github.com/firebase/php-jwt/pull/93) for details. Thanks to [@josephmcdermott](https://github.com/josephmcdermott)!
- Fixes to exceptions classes. See [#81](https://github.com/firebase/php-jwt/pull/81) for details. Thanks to [@Maks3w](https://github.com/Maks3w)!
- Fixes to PHPDoc. See [#76](https://github.com/firebase/php-jwt/pull/76) for details. Thanks to [@akeeman](https://github.com/akeeman)!
#### 3.0.0 / 2015-07-22
- Minimum PHP version updated from `5.2.0` to `5.3.0`.
- Add `\Firebase\JWT` namespace. See
[#59](https://github.com/firebase/php-jwt/pull/59) for details. Thanks to
[@Dashron](https://github.com/Dashron)!
- Require a non-empty key to decode and verify a JWT. See
[#60](https://github.com/firebase/php-jwt/pull/60) for details. Thanks to
[@sjones608](https://github.com/sjones608)!
- Cleaner documentation blocks in the code. See
[#62](https://github.com/firebase/php-jwt/pull/62) for details. Thanks to
[@johanderuijter](https://github.com/johanderuijter)!
#### 2.2.0 / 2015-06-22
- Add support for adding custom, optional JWT headers to `JWT::encode()`. See
[#53](https://github.com/firebase/php-jwt/pull/53/files) for details. Thanks to
[@mcocaro](https://github.com/mcocaro)!
#### 2.1.0 / 2015-05-20
- Add support for adding a leeway to `JWT:decode()` that accounts for clock skew
between signing and verifying entities. Thanks to [@lcabral](https://github.com/lcabral)!
- Add support for passing an object implementing the `ArrayAccess` interface for
`$keys` argument in `JWT::decode()`. Thanks to [@aztech-dev](https://github.com/aztech-dev)!
#### 2.0.0 / 2015-04-01
- **Note**: It is strongly recommended that you update to > v2.0.0 to address
known security vulnerabilities in prior versions when both symmetric and
asymmetric keys are used together.
- Update signature for `JWT::decode(...)` to require an array of supported
algorithms to use when verifying token signatures.
Tests
-----
Run the tests using phpunit:
```bash
$ pear install PHPUnit
$ phpunit --configuration phpunit.xml.dist
PHPUnit 3.7.10 by Sebastian Bergmann.
.....
Time: 0 seconds, Memory: 2.50Mb
OK (5 tests, 5 assertions)
```
New Lines in private keys
-----
If your private key contains `\n` characters, be sure to wrap it in double quotes `""`
and not single quotes `''` in order to properly interpret the escaped characters.
License
-------
[3-Clause BSD](http://opensource.org/licenses/BSD-3-Clause).

33
vendor/firebase/php-jwt/composer.json vendored Normal file
View File

@ -0,0 +1,33 @@
{
"name": "firebase/php-jwt",
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
"homepage": "https://github.com/firebase/php-jwt",
"keywords": [
"php",
"jwt"
],
"authors": [
{
"name": "Neuman Vong",
"email": "neuman+pear@twilio.com",
"role": "Developer"
},
{
"name": "Anant Narayanan",
"email": "anant@php.net",
"role": "Developer"
}
],
"license": "BSD-3-Clause",
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-4": {
"Firebase\\JWT\\": "src"
}
},
"require-dev": {
"phpunit/phpunit": ">=4.8 <=9"
}
}

View File

@ -0,0 +1,6 @@
<?php
namespace Firebase\JWT;
class BeforeValidException extends \UnexpectedValueException
{
}

View File

@ -0,0 +1,6 @@
<?php
namespace Firebase\JWT;
class ExpiredException extends \UnexpectedValueException
{
}

171
vendor/firebase/php-jwt/src/JWK.php vendored Normal file
View File

@ -0,0 +1,171 @@
<?php
namespace Firebase\JWT;
use DomainException;
use UnexpectedValueException;
/**
* JSON Web Key implementation, based on this spec:
* https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41
*
* PHP version 5
*
* @category Authentication
* @package Authentication_JWT
* @author Bui Sy Nguyen <nguyenbs@gmail.com>
* @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
* @link https://github.com/firebase/php-jwt
*/
class JWK
{
/**
* Parse a set of JWK keys
*
* @param array $jwks The JSON Web Key Set as an associative array
*
* @return array An associative array that represents the set of keys
*
* @throws InvalidArgumentException Provided JWK Set is empty
* @throws UnexpectedValueException Provided JWK Set was invalid
* @throws DomainException OpenSSL failure
*
* @uses parseKey
*/
public static function parseKeySet(array $jwks)
{
$keys = array();
if (!isset($jwks['keys'])) {
throw new UnexpectedValueException('"keys" member must exist in the JWK Set');
}
if (empty($jwks['keys'])) {
throw new InvalidArgumentException('JWK Set did not contain any keys');
}
foreach ($jwks['keys'] as $k => $v) {
$kid = isset($v['kid']) ? $v['kid'] : $k;
if ($key = self::parseKey($v)) {
$keys[$kid] = $key;
}
}
if (0 === \count($keys)) {
throw new UnexpectedValueException('No supported algorithms found in JWK Set');
}
return $keys;
}
/**
* Parse a JWK key
*
* @param array $jwk An individual JWK
*
* @return resource|array An associative array that represents the key
*
* @throws InvalidArgumentException Provided JWK is empty
* @throws UnexpectedValueException Provided JWK was invalid
* @throws DomainException OpenSSL failure
*
* @uses createPemFromModulusAndExponent
*/
private static function parseKey(array $jwk)
{
if (empty($jwk)) {
throw new InvalidArgumentException('JWK must not be empty');
}
if (!isset($jwk['kty'])) {
throw new UnexpectedValueException('JWK must contain a "kty" parameter');
}
switch ($jwk['kty']) {
case 'RSA':
if (\array_key_exists('d', $jwk)) {
throw new UnexpectedValueException('RSA private keys are not supported');
}
if (!isset($jwk['n']) || !isset($jwk['e'])) {
throw new UnexpectedValueException('RSA keys must contain values for both "n" and "e"');
}
$pem = self::createPemFromModulusAndExponent($jwk['n'], $jwk['e']);
$publicKey = \openssl_pkey_get_public($pem);
if (false === $publicKey) {
throw new DomainException(
'OpenSSL error: ' . \openssl_error_string()
);
}
return $publicKey;
default:
// Currently only RSA is supported
break;
}
}
/**
* Create a public key represented in PEM format from RSA modulus and exponent information
*
* @param string $n The RSA modulus encoded in Base64
* @param string $e The RSA exponent encoded in Base64
*
* @return string The RSA public key represented in PEM format
*
* @uses encodeLength
*/
private static function createPemFromModulusAndExponent($n, $e)
{
$modulus = JWT::urlsafeB64Decode($n);
$publicExponent = JWT::urlsafeB64Decode($e);
$components = array(
'modulus' => \pack('Ca*a*', 2, self::encodeLength(\strlen($modulus)), $modulus),
'publicExponent' => \pack('Ca*a*', 2, self::encodeLength(\strlen($publicExponent)), $publicExponent)
);
$rsaPublicKey = \pack(
'Ca*a*a*',
48,
self::encodeLength(\strlen($components['modulus']) + \strlen($components['publicExponent'])),
$components['modulus'],
$components['publicExponent']
);
// sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.
$rsaOID = \pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
$rsaPublicKey = \chr(0) . $rsaPublicKey;
$rsaPublicKey = \chr(3) . self::encodeLength(\strlen($rsaPublicKey)) . $rsaPublicKey;
$rsaPublicKey = \pack(
'Ca*a*',
48,
self::encodeLength(\strlen($rsaOID . $rsaPublicKey)),
$rsaOID . $rsaPublicKey
);
$rsaPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
\chunk_split(\base64_encode($rsaPublicKey), 64) .
'-----END PUBLIC KEY-----';
return $rsaPublicKey;
}
/**
* DER-encode the length
*
* DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See
* {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.
*
* @param int $length
* @return string
*/
private static function encodeLength($length)
{
if ($length <= 0x7F) {
return \chr($length);
}
$temp = \ltrim(\pack('N', $length), \chr(0));
return \pack('Ca*', 0x80 | \strlen($temp), $temp);
}
}

512
vendor/firebase/php-jwt/src/JWT.php vendored Normal file
View File

@ -0,0 +1,512 @@
<?php
namespace Firebase\JWT;
use \DomainException;
use \InvalidArgumentException;
use \UnexpectedValueException;
use \DateTime;
/**
* JSON Web Token implementation, based on this spec:
* https://tools.ietf.org/html/rfc7519
*
* PHP version 5
*
* @category Authentication
* @package Authentication_JWT
* @author Neuman Vong <neuman@twilio.com>
* @author Anant Narayanan <anant@php.net>
* @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
* @link https://github.com/firebase/php-jwt
*/
class JWT
{
const ASN1_INTEGER = 0x02;
const ASN1_SEQUENCE = 0x10;
const ASN1_BIT_STRING = 0x03;
/**
* When checking nbf, iat or expiration times,
* we want to provide some extra leeway time to
* account for clock skew.
*/
public static $leeway = 0;
/**
* Allow the current timestamp to be specified.
* Useful for fixing a value within unit testing.
*
* Will default to PHP time() value if null.
*/
public static $timestamp = null;
public static $supported_algs = array(
'ES256' => array('openssl', 'SHA256'),
'HS256' => array('hash_hmac', 'SHA256'),
'HS384' => array('hash_hmac', 'SHA384'),
'HS512' => array('hash_hmac', 'SHA512'),
'RS256' => array('openssl', 'SHA256'),
'RS384' => array('openssl', 'SHA384'),
'RS512' => array('openssl', 'SHA512'),
);
/**
* Decodes a JWT string into a PHP object.
*
* @param string $jwt The JWT
* @param string|array|resource $key The key, or map of keys.
* If the algorithm used is asymmetric, this is the public key
* @param array $allowed_algs List of supported verification algorithms
* Supported algorithms are 'ES256', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'
*
* @return object The JWT's payload as a PHP object
*
* @throws UnexpectedValueException Provided JWT was invalid
* @throws SignatureInvalidException Provided JWT was invalid because the signature verification failed
* @throws BeforeValidException Provided JWT is trying to be used before it's eligible as defined by 'nbf'
* @throws BeforeValidException Provided JWT is trying to be used before it's been created as defined by 'iat'
* @throws ExpiredException Provided JWT has since expired, as defined by the 'exp' claim
*
* @uses jsonDecode
* @uses urlsafeB64Decode
*/
public static function decode($jwt, $key, array $allowed_algs = array())
{
$timestamp = \is_null(static::$timestamp) ? \time() : static::$timestamp;
if (empty($key)) {
throw new InvalidArgumentException('Key may not be empty');
}
$tks = \explode('.', $jwt);
if (\count($tks) != 3) {
throw new UnexpectedValueException('Wrong number of segments');
}
list($headb64, $bodyb64, $cryptob64) = $tks;
if (null === ($header = static::jsonDecode(static::urlsafeB64Decode($headb64)))) {
throw new UnexpectedValueException('Invalid header encoding');
}
if (null === $payload = static::jsonDecode(static::urlsafeB64Decode($bodyb64))) {
throw new UnexpectedValueException('Invalid claims encoding');
}
if (false === ($sig = static::urlsafeB64Decode($cryptob64))) {
throw new UnexpectedValueException('Invalid signature encoding');
}
if (empty($header->alg)) {
throw new UnexpectedValueException('Empty algorithm');
}
if (empty(static::$supported_algs[$header->alg])) {
throw new UnexpectedValueException('Algorithm not supported');
}
if (!\in_array($header->alg, $allowed_algs)) {
throw new UnexpectedValueException('Algorithm not allowed');
}
if ($header->alg === 'ES256') {
// OpenSSL expects an ASN.1 DER sequence for ES256 signatures
$sig = self::signatureToDER($sig);
}
if (\is_array($key) || $key instanceof \ArrayAccess) {
if (isset($header->kid)) {
if (!isset($key[$header->kid])) {
throw new UnexpectedValueException('"kid" invalid, unable to lookup correct key');
}
$key = $key[$header->kid];
} else {
throw new UnexpectedValueException('"kid" empty, unable to lookup correct key');
}
}
// Check the signature
if (!static::verify("$headb64.$bodyb64", $sig, $key, $header->alg)) {
throw new SignatureInvalidException('Signature verification failed');
}
// Check the nbf if it is defined. This is the time that the
// token can actually be used. If it's not yet that time, abort.
if (isset($payload->nbf) && $payload->nbf > ($timestamp + static::$leeway)) {
throw new BeforeValidException(
'Cannot handle token prior to ' . \date(DateTime::ISO8601, $payload->nbf)
);
}
// Check that this token has been created before 'now'. This prevents
// using tokens that have been created for later use (and haven't
// correctly used the nbf claim).
if (isset($payload->iat) && $payload->iat > ($timestamp + static::$leeway)) {
throw new BeforeValidException(
'Cannot handle token prior to ' . \date(DateTime::ISO8601, $payload->iat)
);
}
// Check if this token has expired.
if (isset($payload->exp) && ($timestamp - static::$leeway) >= $payload->exp) {
throw new ExpiredException('Expired token');
}
return $payload;
}
/**
* Converts and signs a PHP object or array into a JWT string.
*
* @param object|array $payload PHP object or array
* @param string $key The secret key.
* If the algorithm used is asymmetric, this is the private key
* @param string $alg The signing algorithm.
* Supported algorithms are 'ES256', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'
* @param mixed $keyId
* @param array $head An array with header elements to attach
*
* @return string A signed JWT
*
* @uses jsonEncode
* @uses urlsafeB64Encode
*/
public static function encode($payload, $key, $alg = 'HS256', $keyId = null, $head = null)
{
$header = array('typ' => 'JWT', 'alg' => $alg);
if ($keyId !== null) {
$header['kid'] = $keyId;
}
if (isset($head) && \is_array($head)) {
$header = \array_merge($head, $header);
}
$segments = array();
$segments[] = static::urlsafeB64Encode(static::jsonEncode($header));
$segments[] = static::urlsafeB64Encode(static::jsonEncode($payload));
$signing_input = \implode('.', $segments);
$signature = static::sign($signing_input, $key, $alg);
$segments[] = static::urlsafeB64Encode($signature);
return \implode('.', $segments);
}
/**
* Sign a string with a given key and algorithm.
*
* @param string $msg The message to sign
* @param string|resource $key The secret key
* @param string $alg The signing algorithm.
* Supported algorithms are 'ES256', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'
*
* @return string An encrypted message
*
* @throws DomainException Unsupported algorithm was specified
*/
public static function sign($msg, $key, $alg = 'HS256')
{
if (empty(static::$supported_algs[$alg])) {
throw new DomainException('Algorithm not supported');
}
list($function, $algorithm) = static::$supported_algs[$alg];
switch ($function) {
case 'hash_hmac':
return \hash_hmac($algorithm, $msg, $key, true);
case 'openssl':
$signature = '';
$success = \openssl_sign($msg, $signature, $key, $algorithm);
if (!$success) {
throw new DomainException("OpenSSL unable to sign data");
} else {
if ($alg === 'ES256') {
$signature = self::signatureFromDER($signature, 256);
}
return $signature;
}
}
}
/**
* Verify a signature with the message, key and method. Not all methods
* are symmetric, so we must have a separate verify and sign method.
*
* @param string $msg The original message (header and body)
* @param string $signature The original signature
* @param string|resource $key For HS*, a string key works. for RS*, must be a resource of an openssl public key
* @param string $alg The algorithm
*
* @return bool
*
* @throws DomainException Invalid Algorithm or OpenSSL failure
*/
private static function verify($msg, $signature, $key, $alg)
{
if (empty(static::$supported_algs[$alg])) {
throw new DomainException('Algorithm not supported');
}
list($function, $algorithm) = static::$supported_algs[$alg];
switch ($function) {
case 'openssl':
$success = \openssl_verify($msg, $signature, $key, $algorithm);
if ($success === 1) {
return true;
} elseif ($success === 0) {
return false;
}
// returns 1 on success, 0 on failure, -1 on error.
throw new DomainException(
'OpenSSL error: ' . \openssl_error_string()
);
case 'hash_hmac':
default:
$hash = \hash_hmac($algorithm, $msg, $key, true);
if (\function_exists('hash_equals')) {
return \hash_equals($signature, $hash);
}
$len = \min(static::safeStrlen($signature), static::safeStrlen($hash));
$status = 0;
for ($i = 0; $i < $len; $i++) {
$status |= (\ord($signature[$i]) ^ \ord($hash[$i]));
}
$status |= (static::safeStrlen($signature) ^ static::safeStrlen($hash));
return ($status === 0);
}
}
/**
* Decode a JSON string into a PHP object.
*
* @param string $input JSON string
*
* @return object Object representation of JSON string
*
* @throws DomainException Provided string was invalid JSON
*/
public static function jsonDecode($input)
{
if (\version_compare(PHP_VERSION, '5.4.0', '>=') && !(\defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) {
/** In PHP >=5.4.0, json_decode() accepts an options parameter, that allows you
* to specify that large ints (like Steam Transaction IDs) should be treated as
* strings, rather than the PHP default behaviour of converting them to floats.
*/
$obj = \json_decode($input, false, 512, JSON_BIGINT_AS_STRING);
} else {
/** Not all servers will support that, however, so for older versions we must
* manually detect large ints in the JSON string and quote them (thus converting
*them to strings) before decoding, hence the preg_replace() call.
*/
$max_int_length = \strlen((string) PHP_INT_MAX) - 1;
$json_without_bigints = \preg_replace('/:\s*(-?\d{'.$max_int_length.',})/', ': "$1"', $input);
$obj = \json_decode($json_without_bigints);
}
if ($errno = \json_last_error()) {
static::handleJsonError($errno);
} elseif ($obj === null && $input !== 'null') {
throw new DomainException('Null result with non-null input');
}
return $obj;
}
/**
* Encode a PHP object into a JSON string.
*
* @param object|array $input A PHP object or array
*
* @return string JSON representation of the PHP object or array
*
* @throws DomainException Provided object could not be encoded to valid JSON
*/
public static function jsonEncode($input)
{
$json = \json_encode($input);
if ($errno = \json_last_error()) {
static::handleJsonError($errno);
} elseif ($json === 'null' && $input !== null) {
throw new DomainException('Null result with non-null input');
}
return $json;
}
/**
* Decode a string with URL-safe Base64.
*
* @param string $input A Base64 encoded string
*
* @return string A decoded string
*/
public static function urlsafeB64Decode($input)
{
$remainder = \strlen($input) % 4;
if ($remainder) {
$padlen = 4 - $remainder;
$input .= \str_repeat('=', $padlen);
}
return \base64_decode(\strtr($input, '-_', '+/'));
}
/**
* Encode a string with URL-safe Base64.
*
* @param string $input The string you want encoded
*
* @return string The base64 encode of what you passed in
*/
public static function urlsafeB64Encode($input)
{
return \str_replace('=', '', \strtr(\base64_encode($input), '+/', '-_'));
}
/**
* Helper method to create a JSON error.
*
* @param int $errno An error number from json_last_error()
*
* @return void
*/
private static function handleJsonError($errno)
{
$messages = array(
JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',
JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',
JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',
JSON_ERROR_UTF8 => 'Malformed UTF-8 characters' //PHP >= 5.3.3
);
throw new DomainException(
isset($messages[$errno])
? $messages[$errno]
: 'Unknown JSON error: ' . $errno
);
}
/**
* Get the number of bytes in cryptographic strings.
*
* @param string $str
*
* @return int
*/
private static function safeStrlen($str)
{
if (\function_exists('mb_strlen')) {
return \mb_strlen($str, '8bit');
}
return \strlen($str);
}
/**
* Convert an ECDSA signature to an ASN.1 DER sequence
*
* @param string $sig The ECDSA signature to convert
* @return string The encoded DER object
*/
private static function signatureToDER($sig)
{
// Separate the signature into r-value and s-value
list($r, $s) = \str_split($sig, (int) (\strlen($sig) / 2));
// Trim leading zeros
$r = \ltrim($r, "\x00");
$s = \ltrim($s, "\x00");
// Convert r-value and s-value from unsigned big-endian integers to
// signed two's complement
if (\ord($r[0]) > 0x7f) {
$r = "\x00" . $r;
}
if (\ord($s[0]) > 0x7f) {
$s = "\x00" . $s;
}
return self::encodeDER(
self::ASN1_SEQUENCE,
self::encodeDER(self::ASN1_INTEGER, $r) .
self::encodeDER(self::ASN1_INTEGER, $s)
);
}
/**
* Encodes a value into a DER object.
*
* @param int $type DER tag
* @param string $value the value to encode
* @return string the encoded object
*/
private static function encodeDER($type, $value)
{
$tag_header = 0;
if ($type === self::ASN1_SEQUENCE) {
$tag_header |= 0x20;
}
// Type
$der = \chr($tag_header | $type);
// Length
$der .= \chr(\strlen($value));
return $der . $value;
}
/**
* Encodes signature from a DER object.
*
* @param string $der binary signature in DER format
* @param int $keySize the number of bits in the key
* @return string the signature
*/
private static function signatureFromDER($der, $keySize)
{
// OpenSSL returns the ECDSA signatures as a binary ASN.1 DER SEQUENCE
list($offset, $_) = self::readDER($der);
list($offset, $r) = self::readDER($der, $offset);
list($offset, $s) = self::readDER($der, $offset);
// Convert r-value and s-value from signed two's compliment to unsigned
// big-endian integers
$r = \ltrim($r, "\x00");
$s = \ltrim($s, "\x00");
// Pad out r and s so that they are $keySize bits long
$r = \str_pad($r, $keySize / 8, "\x00", STR_PAD_LEFT);
$s = \str_pad($s, $keySize / 8, "\x00", STR_PAD_LEFT);
return $r . $s;
}
/**
* Reads binary DER-encoded data and decodes into a single object
*
* @param string $der the binary data in DER format
* @param int $offset the offset of the data stream containing the object
* to decode
* @return array [$offset, $data] the new offset and the decoded object
*/
private static function readDER($der, $offset = 0)
{
$pos = $offset;
$size = \strlen($der);
$constructed = (\ord($der[$pos]) >> 5) & 0x01;
$type = \ord($der[$pos++]) & 0x1f;
// Length
$len = \ord($der[$pos++]);
if ($len & 0x80) {
$n = $len & 0x1f;
$len = 0;
while ($n-- && $pos < $size) {
$len = ($len << 8) | \ord($der[$pos++]);
}
}
// Value
if ($type == self::ASN1_BIT_STRING) {
$pos++; // Skip the first contents octet (padding indicator)
$data = \substr($der, $pos, $len - 1);
$pos += $len - 1;
} elseif (!$constructed) {
$data = \substr($der, $pos, $len);
$pos += $len;
} else {
$data = null;
}
return array($pos, $data);
}
}

View File

@ -0,0 +1,6 @@
<?php
namespace Firebase\JWT;
class SignatureInvalidException extends \UnexpectedValueException
{
}

View File

@ -0,0 +1,13 @@
# Changelog
## 1.7.0 - 2021-01-18
### Added
- Added a `bufferSampleSize` parameter to the `FinfoMimeTypeDetector` class that allows you to send a reduced content sample which costs less memory.
## 1.6.0 - 2021-01-18
### Changes
- Updated generated mime-type map

View File

@ -8,17 +8,26 @@
"email": "info@frankdejonge.nl"
}
],
"scripts": {
"phpstan": "vendor/bin/phpstan analyse -l 6 src"
},
"require": {
"php": "^7.2 || ^8.0",
"ext-fileinfo": "*"
},
"require-dev": {
"phpunit/phpunit": "^8.5.8",
"phpstan/phpstan": "^0.12.36"
"phpunit/phpunit": "^8.5.8 || ^9.3",
"phpstan/phpstan": "^0.12.68",
"friendsofphp/php-cs-fixer": "^2.18"
},
"autoload": {
"psr-4": {
"League\\MimeTypeDetection\\": "src"
}
},
"config": {
"platform": {
"php": "7.2.0"
}
}
}

View File

@ -4,10 +4,10 @@ declare(strict_types=1);
namespace League\MimeTypeDetection;
use finfo;
use const FILEINFO_MIME_TYPE;
use const PATHINFO_EXTENSION;
use finfo;
class FinfoMimeTypeDetector implements MimeTypeDetector
{
@ -23,16 +23,25 @@ class FinfoMimeTypeDetector implements MimeTypeDetector
*/
private $extensionMap;
public function __construct(string $magicFile = '', ExtensionToMimeTypeMap $extensionMap = null)
{
/**
* @var int|null
*/
private $bufferSampleSize;
public function __construct(
string $magicFile = '',
ExtensionToMimeTypeMap $extensionMap = null,
?int $bufferSampleSize = null
) {
$this->finfo = new finfo(FILEINFO_MIME_TYPE, $magicFile);
$this->extensionMap = $extensionMap ?: new GeneratedExtensionToMimeTypeMap();
$this->bufferSampleSize = $bufferSampleSize;
}
public function detectMimeType(string $path, $contents): ?string
{
$mimeType = is_string($contents)
? (@$this->finfo->buffer($contents) ?: null)
? (@$this->finfo->buffer($this->takeSample($contents)) ?: null)
: null;
if ($mimeType !== null && ! in_array($mimeType, self::INCONCLUSIVE_MIME_TYPES)) {
@ -56,7 +65,15 @@ class FinfoMimeTypeDetector implements MimeTypeDetector
public function detectMimeTypeFromBuffer(string $contents): ?string
{
return @$this->finfo->buffer($contents) ?: null;
return @$this->finfo->buffer($this->takeSample($contents)) ?: null;
}
private function takeSample(string $contents): string
{
if ($this->bufferSampleSize === null) {
return $contents;
}
return (string) substr($contents, 0, $this->bufferSampleSize);
}
}

View File

@ -8,6 +8,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap
{
/**
* @var string[]
*
* @internal
*/
public const MIME_TYPES_FOR_EXTENSIONS = [
@ -666,6 +667,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap
'opf' => 'application/oebps-package+xml',
'opml' => 'text/x-opml',
'oprc' => 'application/vnd.palm',
'opus' => 'audio/ogg',
'org' => 'text/x-org',
'osf' => 'application/vnd.yamaha.openscoreformat',
'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',

View File

@ -0,0 +1 @@
# 一个php备份恢复数据库的扩展 相关文档https://www.kancloud.cn/lotofbadcode/php_spirit/content

View File

@ -0,0 +1,24 @@
{
"name": "lotofbadcode/phpspirit_databackup",
"description": "一个PHP数据库备份恢复的插件",
"license": "Apache-2.0",
"type": "library",
"keywords": [
"php",
"library"
],
"authors": [
{
"name": "代码庸医",
"email": "3359964266@qq.com"
}
],
"require": {
"php": ">=7.0"
},
"autoload": {
"psr-4": {
"phpspirit\\databackup\\": "src/"
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

View File

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html>
<head>
<title>数据备份</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" ></script>
<link href="css/jquery.circliful.css" rel="stylesheet" type="text/css" />
<link href="css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<script src="js/jquery.circliful.js"></script>
<script>
function backup(predate)
{
$.ajax({
url: 'backupajax.php',
type: 'POST', //POST
async: true, //或false,是否异步
dataType: 'json',
data:predate,
success: function (data, textStatus, jqXHR) {
datainfo = '表[' + data.nowtable + ']完成' + data.tablepercentage + '%';
if (data.totalpercentage >= 100)
{
datainfo = '备份完成';
}
html = '<div id="myStat2" data-dimension="250" data-text="' + data.totalpercentage + '%" data-info="' + datainfo + '" data-width="30" data-fontsize="38" data-percent="' + data.totalpercentage + '" data-fgcolor="#61a9dc" data-bgcolor="#eee"></div>';
$('#tongji').html(html);
$('#myStat2').circliful();
if (data.totalpercentage < 100)
{
backup(data);
}
}
})
}
</script>
</head>
<body>
<div><input type="button" value="备份" onclick="backup({})" /></div>
<center>
<div id="tongji"></div>
</center>
<script>
$(document).ready(function () {
});
</script>
</body>
</html>

View File

@ -0,0 +1,35 @@
<?php
set_time_limit(0);
error_reporting(-1);
ini_set('display_errors', 1);
include dirname(__FILE__) . '/../src/BackupFactory.php';
include dirname(__FILE__) . '/../src/IBackup.php';
include dirname(__FILE__) . '/../src/mysql/backup.php';
use phpspirit\databackup\BackupFactory;
//自行判断文件夹
$backupdir = '';
if (isset($_POST['backdir']) && $_POST['backdir'] != '') {
$backupdir = $_POST['backdir'];
} else {
$backupdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . date('Ymdhis');
}
if (!is_dir($backupdir)) {
mkdir($backupdir, 0777, true);
}
$backup = BackupFactory::instance('mysql', '127.0.0.1:3306', 'smes', 'root', 'root');
$backup->setbackdir($backupdir)
->settablelist(['md_menu', 'md_api_group'])
->setstructuretable(['md_api_group'])
->setvolsize(0.2);
do {
$result = $backup->backup();
echo str_repeat(' ', 1000); //这里会把浏览器缓存装满
ob_flush(); //把php缓存写入apahce缓存
flush(); //把apahce缓存写入浏览器缓存
if ($result['totalpercentage'] > 0) {
echo '完成' . $result['totalpercentage'] . '%<br />';
}
} while ($result['totalpercentage'] < 100);

View File

@ -0,0 +1,31 @@
<?php
error_reporting(-1);
ini_set('display_errors', 1);
include dirname(__FILE__) . '/../src/BackupFactory.php';
include dirname(__FILE__) . '/../src/IBackup.php';
include dirname(__FILE__) . '/../src/mysql/backup.php';
use phpspirit\databackup\BackupFactory;
//自行判断文件夹
$backupdir = '';
if (isset($_POST['backdir']) && $_POST['backdir'] != '') {
$backupdir = $_POST['backdir'];
} else {
$backupdir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . date('Ymdhis');
}
if (!is_dir($backupdir)) {
mkdir($backupdir, 0777, true);
}
$backup = BackupFactory::instance('mysql', '127.0.0.1:3306', 'smes', 'root', 'root');
$result = $backup->setbackdir($backupdir)
->setvolsize(0.2)
->setonlystructure(false) //设置是否只备份目录结构
->settablelist(['md_menu', 'md_api_group','cmseasy_b_category']) //设置要备份的表, 默认全部表
->setstructuretable(['md_api_group'])
->ajaxbackup($_POST);
echo json_encode($result);

View File

@ -0,0 +1,20 @@
.circliful {
position: relative;
}
.circle-text, .circle-info, .circle-text-half, .circle-info-half {
width: 100%;
position: absolute;
text-align: center;
display: inline-block;
}
.circle-info, .circle-info-half {
color: #999;
}
.circliful .fa {
margin: -10px 3px 0 3px;
position: relative;
bottom: 4px;
}

View File

@ -0,0 +1,191 @@
(function( $ ) {
$.fn.circliful = function(options) {
var settings = $.extend({
// These are the defaults.
foregroundColor: "#556b2f",
backgroundColor: "#eee",
fillColor: false,
width: 15,
dimension: 200,
size: 15,
percent: 50,
animationStep: 1.0
}, options );
return this.each(function() {
var dimension = '';
var text = '';
var info = '';
var width = '';
var size = 0;
var percent = 0;
var endPercent = 100;
var fgcolor = '';
var bgcolor = '';
var icon = '';
var animationstep = 0.0;
$(this).addClass('circliful');
if($(this).data('dimension') != undefined) {
dimension = $(this).data('dimension');
} else {
dimension = settings.dimension;
}
if($(this).data('width') != undefined) {
width = $(this).data('width');
} else {
width = settings.width;
}
if($(this).data('fontsize') != undefined) {
size = $(this).data('fontsize');
} else {
size = settings.size;
}
if($(this).data('percent') != undefined) {
percent = $(this).data('percent') / 100;
endPercent = $(this).data('percent');
} else {
percent = settings.percent / 100;
}
if($(this).data('fgcolor') != undefined) {
fgcolor = $(this).data('fgcolor');
} else {
fgcolor = settings.foregroundColor;
}
if($(this).data('bgcolor') != undefined) {
bgcolor = $(this).data('bgcolor');
} else {
bgcolor = settings.backgroundColor;
}
if($(this).data('animation-step') != undefined) {
animationstep = parseFloat($(this).data('animation-step'));
} else {
animationstep = settings.animationStep;
}
if($(this).data('text') != undefined) {
text = $(this).data('text');
if($(this).data('icon') != undefined) {
icon = '<i class="fa ' + $(this).data('icon') + '"></i>';
}
if($(this).data('type') != undefined) {
type = $(this).data('type');
if(type == 'half') {
$(this).append('<span class="circle-text-half">' + icon + text + '</span>');
$(this).find('.circle-text-half').css({'line-height': (dimension / 1.45) + 'px', 'font-size' : size + 'px' });
} else {
$(this).append('<span class="circle-text">' + icon + text + '</span>');
$(this).find('.circle-text').css({'line-height': dimension + 'px', 'font-size' : size + 'px' });
}
} else {
$(this).append('<span class="circle-text">' + icon + text + '</span>');
$(this).find('.circle-text').css({'line-height': dimension + 'px', 'font-size' : size + 'px' });
}
} else if($(this).data('icon') != undefined) {
}
if($(this).data('info') != undefined) {
info = $(this).data('info');
if($(this).data('type') != undefined) {
type = $(this).data('type');
if(type == 'half') {
$(this).append('<span class="circle-info-half">' + info + '</span>');
$(this).find('.circle-info-half').css({'line-height': (dimension * 0.9) + 'px', });
} else {
$(this).append('<span class="circle-info">' + info + '</span>');
$(this).find('.circle-info').css({'line-height': (dimension * 1.25) + 'px', });
}
} else {
$(this).append('<span class="circle-info">' + info + '</span>');
$(this).find('.circle-info').css({'line-height': (dimension * 1.25) + 'px', });
}
}
$(this).width(dimension + 'px');
var canvas = $('<canvas></canvas>').attr({ width: dimension, height: dimension }).appendTo($(this)).get(0);
var context = canvas.getContext('2d');
var x = canvas.width / 2;
var y = canvas.height / 2;
var degrees = percent * 360.0;
var radians = degrees * (Math.PI / 180);
var radius = canvas.width / 2.5;
var startAngle = 2.3 * Math.PI;
var endAngle = 0;
var counterClockwise = false;
var curPerc = animationstep === 0.0 ? endPercent : 0.0;
var curStep = Math.max(animationstep, 0.0);
var circ = Math.PI * 2;
var quart = Math.PI / 2;
var type = '';
var fill = false;
if($(this).data('type') != undefined) {
type = $(this).data('type');
if(type == 'half') {
var startAngle = 2.0 * Math.PI;
var endAngle = 3.13;
var circ = Math.PI * 1.0;
var quart = Math.PI / 0.996;
}
}
if($(this).data('fill') != undefined) {
fill = $(this).data('fill');
} else {
fill = settings.fillColor;
}
//animate foreground circle
function animate(current) {
context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();
context.arc(x, y, radius, endAngle, startAngle, false);
context.lineWidth = width - 1;
// line color
context.strokeStyle = bgcolor;
context.stroke();
if(fill) {
context.fillStyle = fill;
context.fill();
}
context.beginPath();
context.arc(x, y, radius, -(quart), ((circ) * current) - quart, false);
context.lineWidth = width;
// line color
context.strokeStyle = fgcolor;
context.stroke();
if (curPerc < endPercent) {
curPerc += curStep;
// requestAnimationFrame(function () {
animate(Math.min(curPerc, endPercent) / 100);
//});
}
}
animate(curPerc / 100);
});
};
}( jQuery ));

View File

@ -0,0 +1 @@
(function(a){a.fn.circliful=function(b){var c=a.extend({foregroundColor:"#556b2f",backgroundColor:"#eee",fillColor:false,width:15,dimension:200,size:15,percent:50,animationStep:1},b);return this.each(function(){var F="";var s="";var E="";var v="";var t=0;var e=0;var l=100;var B="";var d="";var D="";var q=0;a(this).addClass("circliful");if(a(this).data("dimension")!=undefined){F=a(this).data("dimension")}else{F=c.dimension}if(a(this).data("width")!=undefined){v=a(this).data("width")}else{v=c.width}if(a(this).data("fontsize")!=undefined){t=a(this).data("fontsize")}else{t=c.size}if(a(this).data("percent")!=undefined){e=a(this).data("percent")/100;l=a(this).data("percent")}else{e=c.percent/100}if(a(this).data("fgcolor")!=undefined){B=a(this).data("fgcolor")}else{B=c.foregroundColor}if(a(this).data("bgcolor")!=undefined){d=a(this).data("bgcolor")}else{d=c.backgroundColor}if(a(this).data("animation-step")!=undefined){q=parseFloat(a(this).data("animation-step"))}else{q=c.animationStep}if(a(this).data("text")!=undefined){s=a(this).data("text");if(a(this).data("icon")!=undefined){D='<i class="fa '+a(this).data("icon")+'"></i>'}if(a(this).data("type")!=undefined){i=a(this).data("type");if(i=="half"){a(this).append('<span class="circle-text-half">'+D+s+"</span>");a(this).find(".circle-text-half").css({"line-height":(F/1.45)+"px","font-size":t+"px"})}else{a(this).append('<span class="circle-text">'+D+s+"</span>");a(this).find(".circle-text").css({"line-height":F+"px","font-size":t+"px"})}}else{a(this).append('<span class="circle-text">'+D+s+"</span>");a(this).find(".circle-text").css({"line-height":F+"px","font-size":t+"px"})}}else{if(a(this).data("icon")!=undefined){}}if(a(this).data("info")!=undefined){E=a(this).data("info");if(a(this).data("type")!=undefined){i=a(this).data("type");if(i=="half"){a(this).append('<span class="circle-info-half">'+E+"</span>");a(this).find(".circle-info-half").css({"line-height":(F*0.9)+"px",})}else{a(this).append('<span class="circle-info">'+E+"</span>");a(this).find(".circle-info").css({"line-height":(F*1.25)+"px",})}}else{a(this).append('<span class="circle-info">'+E+"</span>");a(this).find(".circle-info").css({"line-height":(F*1.25)+"px",})}}a(this).width(F+"px");var h=a("<canvas></canvas>").attr({width:F,height:F}).appendTo(a(this)).get(0);var f=h.getContext("2d");var p=h.width/2;var o=h.height/2;var A=e*360;var G=A*(Math.PI/180);var j=h.width/2.5;var z=2.3*Math.PI;var u=0;var C=false;var m=q===0?l:0;var n=Math.max(q,0);var r=Math.PI*2;var g=Math.PI/2;var i="";var w=false;if(a(this).data("type")!=undefined){i=a(this).data("type");if(i=="half"){var z=2*Math.PI;var u=3.13;var r=Math.PI*1;var g=Math.PI/0.996}}if(a(this).data("fill")!=undefined){w=a(this).data("fill")}else{w=c.fillColor}function k(x){f.clearRect(0,0,h.width,h.height);f.beginPath();f.arc(p,o,j,u,z,false);f.lineWidth=v-1;f.strokeStyle=d;f.stroke();if(w){f.fillStyle=w;f.fill()}f.beginPath();f.arc(p,o,j,-(g),((r)*x)-g,false);f.lineWidth=v;f.strokeStyle=B;f.stroke();if(m<l){m+=n;requestAnimationFrame(function(){k(Math.min(m,l)/100)})}}k(m/100)})}}(jQuery));

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

View File

@ -0,0 +1,57 @@
<html>
<head>
<title>数据恢复</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js" ></script>
<link href="css/jquery.circliful.css" rel="stylesheet" type="text/css" />
<link href="css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<script src="js/jquery.circliful.js"></script>
<script>
$(document).ready(function () {
$('#myStat2').circliful();
});
function recovey(predate)
{
$.ajax({
url: 'recoveryajax.php',
type: 'POST', //GET
async: true, //或false,是否异步
data:predate,
dataType: 'json',
success: function (data, textStatus, jqXHR) {
if (data.totalpercentage < 100)
{
datainfo = '正在恢复...';
} else
{
datainfo = '恢复完成';
}
html = '<div id="myStat2" data-dimension="250" data-text="' + data.totalpercentage + '%" data-info="' + datainfo + '" data-width="30" data-fontsize="38" data-percent="' + data.totalpercentage + '" data-fgcolor="#61a9dc" data-bgcolor="#eee"></div>';
$('#tongji').html(html);
$('#myStat2').circliful();
if (data.totalpercentage < 100)
{
recovey(data);
}
}
})
}
</script>
</head>
<body>
<div><input type="button" value="恢复" onclick="recovey({})" /></div>
<center>
<div id="tongji">
<div id="myStat2" data-dimension="250" data-text="0%" data-info="等待恢复" data-width="30" data-fontsize="38" data-percent="0" data-fgcolor="#61a9dc" data-bgcolor="#eee"></div>
</div>
</center>
</body>
</html>

View File

@ -0,0 +1,25 @@
<?php
set_time_limit(0);
error_reporting(-1);
ini_set('display_errors', 1);
include dirname(__FILE__) . '/../src/RecoveryFactory.php';
include dirname(__FILE__) . '/../src/IRecovery.php';
include dirname(__FILE__) . '/../src/mysql/Recovery.php';
use phpspirit\databackup\RecoveryFactory;
$recovery = RecoveryFactory::instance('mysql', '127.0.0.1:3306', 'test', 'root', 'root');
$recovery->setSqlfiledir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup'.DIRECTORY_SEPARATOR.'20191205010418');
do
{
$result = $recovery->recovery();
echo str_repeat(' ', 1000); //这里会把浏览器缓存装满
ob_flush(); //把php缓存写入apahce缓存
flush(); //把apahce缓存写入浏览器缓存
if ($result['totalpercentage'] > 0)
{
echo '完成' . $result['totalpercentage'] . '%<br />';
}
} while ($result['totalpercentage'] < 100);

View File

@ -0,0 +1,13 @@
<?php
include dirname(__FILE__) . '/../vendor/autoload.php';
include dirname(__FILE__) . '/../src/RecoveryFactory.php';
include dirname(__FILE__) . '/../src/IRecovery.php';
include dirname(__FILE__) . '/../src/mysql/Recovery.php';
use phpspirit\databackup\RecoveryFactory;
$recovery = RecoveryFactory::instance('mysql', '127.0.0.1:3306', 'test', 'root', 'root');
$result = $recovery->setSqlfiledir(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'backup'.DIRECTORY_SEPARATOR.'20191205010418')
->ajaxrecovery($_POST);
echo json_encode($result);

View File

@ -0,0 +1,24 @@
<?php
namespace phpspirit\databackup;
use phpspirit\databackup\mysql\Backup;
use PDO;
class BackupFactory
{
private static $instance = null;
public static function instance($scheme, $server, $dbname, $username, $password, $code = 'utf8')
{
$args = md5(implode('_', func_get_args()));
if (!isset(self::$instance[$args]) || self::$instance[$args] == null) {
switch ($scheme) {
case 'mysql':
$pdo = new PDO($scheme . ':host=' . $server . ';dbname=' . $dbname, $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES'" . $code . "';"]);
self::$instance[$args] = new Backup($pdo);
}
}
return self::$instance[$args];
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace phpspirit\databackup;
interface IBackup
{
/**
* 设置分卷大小
*
* @param float|int $size
* @return void
*/
public function setvolsize($size);
/**
* 设置备份路径
*
* @param string $dir
* @return void
*/
public function setbackdir($dir);
/**
* 备份
*
* @return void
*/
public function backup();
/**
* ajax备份
*
* @return void
*/
public function ajaxbackup();
}

View File

@ -0,0 +1,28 @@
<?php
namespace phpspirit\databackup;
interface IRecovery
{
/**
* 待恢复SQL文件目录
*
* @param [type] $dir
* @return void
*/
public function setSqlfiledir($dir);
/**
*
* 恢复
* @return void
*/
public function recovery();
/**
* AJAX恢复
*
* @return void
*/
public function ajaxrecovery();
}

View File

@ -0,0 +1,24 @@
<?php
namespace phpspirit\databackup;
use phpspirit\databackup\mysql\Recovery;
use PDO;
class RecoveryFactory
{
private static $instance = null;
public static function instance($scheme, $server, $dbname, $username, $password, $code = 'utf8')
{
$args = md5(implode('_', func_get_args()));
if (self::$instance[$args] == null) {
switch ($scheme) {
case 'mysql':
$pdo = new PDO($scheme . ':host=' . $server . ';dbname=' . $dbname, $username, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES'" . $code . "';"]);
self::$instance[$args] = new Recovery($pdo);
}
}
return self::$instance[$args];
}
}

View File

@ -0,0 +1,347 @@
<?php
namespace phpspirit\databackup\mysql;
use PDO;
use Exception;
use phpspirit\databackup\IBackup;
class Backup implements IBackup
{
/**
* 分卷大小的 默认2M
* @var int
*/
private $_volsize = 2;
/**
* 备份路径
* @var string
*/
private $_backdir = '';
/**
* 表集合
* @var array
*/
private $_tablelist = [];
/**
* 当前备份表的索引
*/
private $_nowtableidx = 0;
/**
* 当前表已备份条数
* @var int
*/
private $_nowtableexeccount = 0;
/**
* 当前表的总记录数
* @var int
*/
private $_nowtabletotal = 0;
/**
* 当前表备份百分比
*/
private $_nowtablepercentage = 0;
/**
* PDO对象
* @var PDO
*/
private $_pdo;
/**
* 保存的文件名
* @var string
*/
private $_filename = '';
/**
* insert Values 总条数
* @var type
*/
private $_totallimit = 200;
/**
* 是否仅备份结构不备份数据
*/
private $_onlystructure = false;
/**
*
* @param string $server 服务器
* @param string $dbname 数据库
* @param string $username 账户
* @param string $password 密码
* @param string $code 编码
*/
/**
* 仅备份数据结构 不备份数据的表
*/
private $_structuretable = [];
public function __construct($pdo)
{
$this->_pdo = $pdo;
}
public function setvolsize($size)
{
$this->_volsize = $size;
return $this;
}
public function settablelist($tablelist = [])
{
$this->_tablelist = $tablelist;
return $this;
}
public function gettablelist()
{
if (!$this->_tablelist) {
$rs = $this->_pdo->query('show table status');
$res = $rs->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $r) {
$this->_tablelist[] = $r['Name'];
}
}
return $this->_tablelist;
}
/**
* 设置备份目录
*/
public function setbackdir($dir)
{
if ($this->_backdir) {
return $this;
}
$this->_backdir = $dir;
if (!is_dir($dir)) {
mkdir($dir, 0777);
}
return $this;
}
public function getbackdir()
{
return $this->_backdir;
}
/**
* 设置文件名
* @param string $filename
* @return $this
*/
public function setfilename($filename)
{
$this->_filename = $filename;
if (!is_file($this->_backdir . '/' . $this->_filename)) {
fopen($this->_backdir . '/' . $this->_filename, "x+");
}
// return $this;
}
/**
* 获取文件名
* @return string
*/
public function getfilename()
{
if (!$this->_filename) {
$this->_filename = isset($this->_tablelist[$this->_nowtableidx]) ? $this->_tablelist[$this->_nowtableidx] . '#0.sql' : '';
}
if (!is_file($this->_backdir . '/' . $this->_filename)) {
fopen($this->_backdir . '/' . $this->_filename, "x+");
}
return $this->_filename;
}
/**
* 设置是否仅备份结构
*/
public function setonlystructure($bool)
{
$this->_onlystructure = $bool;
return $this;
}
public function getonlystructure()
{
return $this->_onlystructure;
}
/**
* 设置仅备份表结构 不备份数据的表
*/
public function setstructuretable($table = [])
{
$this->_structuretable = $table;
return $this;
}
public function getstructuretable()
{
return $this->_structuretable;
}
/**
* 备份
*
* 正在备份的表
* 正在备份的表的索引
* 正在备份的表已备份的记录数
* 正在备份的表总记录数
* 当前备份表百分比
* 总百分比
*/
public function backup()
{
$totalpercentage = 100; //默认总百分比 0%
$tablelist = $this->gettablelist(); //所有的表列表
$nowtable = '';
//上一次备份的表完成100% 将备份下一个表
if (
$this->_nowtablepercentage >= 100 &&
isset($tablelist[$this->_nowtableidx + 1])
) {
$this->_nowtableidx = $this->_nowtableidx + 1;
$this->_nowtableexeccount = $this->_nowtabletotal = 0;
$this->setfilename($tablelist[$this->_nowtableidx] . '#0.sql');
}
//备份表开始 默认第一个
if (isset($tablelist[$this->_nowtableidx])) {
$nowtable = $tablelist[$this->_nowtableidx]; //当前正在备份的表
$sqlstr = '';
if ($this->_nowtableexeccount == 0) { //将要执行表已备份的sql记录数
//Drop 建表
$sqlstr .= 'DROP TABLE IF EXISTS `' . $nowtable . '`;' . PHP_EOL;
$rs = $this->_pdo->query('SHOW CREATE TABLE `' . $nowtable . '`');
$res = $rs->fetchAll();
$sqlstr .= $res[0][1] . ';' . PHP_EOL;
file_put_contents($this->_backdir . DIRECTORY_SEPARATOR . $this->getfilename(), file_get_contents($this->_backdir . DIRECTORY_SEPARATOR . $this->getfilename()) . $sqlstr);
if ($this->getonlystructure() === false && !in_array($nowtable, $this->getstructuretable())) {
$this->gettabletotal($nowtable); //当前备份表总条数
}
}
if ($this->_nowtableexeccount < $this->_nowtabletotal) {
//建记录SQL语句 并设置已经备份的条数
$this->_singleinsertrecord($nowtable, $this->_nowtableexeccount);
}
//计算单表百分比
if ($this->_nowtabletotal != 0) {
$this->_nowtablepercentage = $this->_nowtableexeccount / $this->_nowtabletotal * 100;
} else {
$this->_nowtablepercentage = 100;
}
if ($this->_nowtablepercentage == 100) {
$totalpercentage = ($this->_nowtableidx + 1) / count($tablelist) * 100;
} else {
$totalpercentage = ($this->_nowtableidx) / count($tablelist) * 100;
}
}
return [
'nowtable' => $nowtable, //当前正在备份的表
'nowtableidx' => $this->_nowtableidx, //当前正在备份表的索引
'nowtableexeccount' => $this->_nowtableexeccount, //当前表已备份条数
'nowtabletotal' => $this->_nowtabletotal, //当前表总条数
'totalpercentage' => (int) $totalpercentage, //总百分比
'tablepercentage' => (int) $this->_nowtablepercentage, //当前表百分比
'backfilename' => $this->getfilename(),
];
}
public function ajaxbackup($preresult = [])
{
if ($this->getbackdir() == '' && !isset($preresult['backdir'])) {
throw new Exception('请先设置备份目录');
}
if (isset($preresult['backdir'])) {
$this->setbackdir($preresult['backdir']);
}
unset($preresult['backdir']);
if ($preresult) {
$this->_nowtableidx = $preresult['nowtableidx'];
$this->_nowtableexeccount = $preresult['nowtableexeccount'];
$this->_nowtabletotal = $preresult['nowtabletotal'];
$this->_nowtablepercentage = (int) $preresult['tablepercentage'];
$this->setfilename($preresult['backfilename']);
}
$result = $this->backup();
$result['backdir'] = $this->getbackdir();
return $result;
}
//获取表中总条数
public function gettabletotal($table)
{
$value = $this->_pdo->query('select count(*) from ' . $table);
$counts = $value->fetchAll(PDO::FETCH_NUM);
return $this->_nowtabletotal = $counts[0][0];
}
private function _singleinsertrecord($tablename, $limit)
{
$sql = 'select * from `' . $tablename . '` limit ' . $limit . ',' . $this->_totallimit;
$valuers = $this->_pdo->query($sql);
$valueres = $valuers->fetchAll(PDO::FETCH_NUM);
$insertsqlv = '';
$insertsql = 'insert into `' . $tablename . '` VALUES ';
foreach ($valueres as $v) {
$insertsqlv .= ' ( ';
foreach ($v as $_v) {
$insertsqlv .= $this->_pdo->quote($_v) . ",";
}
$insertsqlv = rtrim($insertsqlv, ',');
$insertsqlv .= ' ),';
}
$insertsql .= rtrim($insertsqlv, ',') . ' ;' . PHP_EOL;
$this->_checkfilesize();
file_put_contents($this->_backdir . '/' . $this->getfilename(), file_get_contents($this->_backdir . '/' . $this->getfilename()) . $insertsql);
$this->_nowtableexeccount += $this->_totallimit;
$this->_nowtableexeccount = $this->_nowtableexeccount >= $this->_nowtabletotal ? $this->_nowtabletotal : $this->_nowtableexeccount;
}
/**
* 检查文件大小
*/
private function _checkfilesize()
{
clearstatcache();
$b = filesize($this->_backdir . '/' . $this->getfilename()) < $this->_volsize * 1024 * 1024 ? true : false;
if ($b === false) {
$filearr = explode('#', $this->getfilename());
if (count($filearr) == 2) {
$fileext = explode('.', $filearr[1]); //.sql
$filename = $filearr[0] . '#' . ($fileext[0] + 1) . '.sql';
$this->setfilename($filename);
}
}
}
}

View File

@ -0,0 +1,126 @@
<?php
namespace phpspirit\databackup\mysql;
use PDO;
use Exception;
use phpspirit\databackup\IRecovery;
class Recovery implements IRecovery
{
/**
* SQL文件所在的目录
* @var string
*/
private $_sqlfiledir = '';
/**
* SQL文件数组
* @var array
*/
private $_sqlfilesarr = [];
/**
* 当前恢复文件数组的索引
* @var int
*/
private $_nowfileidx = 0;
/**
* 下一个恢复的文件
* @var int
*/
private $_nextfileidx = 0;
public function __construct($pdo)
{
$this->_pdo = $pdo;
}
public function setSqlfiledir($dir)
{
$this->_sqlfiledir = $dir;
return $this;
}
public function getfiles()
{
if (!$this->_sqlfilesarr) {
$dir = $this->_sqlfiledir;
$iterator = new \DirectoryIterator($dir);
$filesarr = [];
foreach ($iterator as $it) {
if (!$it->isDot()) {
$filenameinfo = explode('#', $it->getFilename());
$fileext = explode('.', $filenameinfo[1]);
$filesarr[$filenameinfo[0]][$fileext[0]] = $it->getFilename();
}
}
ksort($filesarr);
foreach ($filesarr as $k => $f) {
ksort($f);
$filesarr[$k] = $f;
}
foreach ($filesarr as $f) {
foreach ($f as $_f) {
$this->_sqlfilesarr[] = $_f;
}
}
}
return $this->_sqlfilesarr;
}
public function recovery()
{
try {
$filesarr = $this->getfiles();
$totalpercentage = 100;
$this->_nowfileidx = $this->_nextfileidx;
if (isset($filesarr[$this->_nowfileidx])) {
$this->_importsqlfile($this->_sqlfiledir . DIRECTORY_SEPARATOR . $filesarr[$this->_nowfileidx]);
$totalpercentage = $this->_nowfileidx / count($this->_sqlfilesarr) * 100;
$this->_nextfileidx = $this->_nowfileidx + 1;
}
return [
'nowfileidex' => $this->_nowfileidx, //当前正在恢复的文件
'nextfileidx' => $this->_nextfileidx,
'totalpercentage' => (int) $totalpercentage, //总百分比
];
} catch (Exception $ex) {
throw $ex;
}
}
public function ajaxrecovery($preresult = [])
{
if($preresult)
{
$this->_nowfileidx = $preresult['nowfileidex'];
$this->_nextfileidx = $preresult['nextfileidx'];
}
$result = $this->recovery();
return $result;
}
private function _importsqlfile($sqlfile)
{
if (is_file($sqlfile)) {
try {
$content = file_get_contents($sqlfile);
$arr = explode(';' . PHP_EOL, $content);
foreach ($arr as $a) {
if (trim($a) != '') {
$this->_pdo->exec($a);
}
}
} catch (Exception $ex) {
return false;
}
}
return true;
}
}

View File

@ -167,15 +167,9 @@ Build status: [![Build Status](https://travis-ci.org/PHPMailer/PHPMailer.svg)](h
If this isn't passing, is there something you can do to help?
## Security
Please disclose any vulnerabilities found responsibly - report any security problems found to the maintainers privately.
Please disclose any vulnerabilities found responsibly report security issues to the maintainers privately.
PHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity.
PHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer).
PHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a critical remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html).
See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) for more detail on security issues.
See [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) for details on security issues.
## Contributing
Please submit bug reports, suggestions and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues).

View File

@ -1 +1 @@
6.1.7
6.2.0

View File

@ -21,26 +21,30 @@
],
"funding": [
{
"url": "https://github.com/synchro",
"url": "https://github.com/Synchro",
"type": "github"
}
],
"require": {
"php": ">=5.5.0",
"ext-ctype": "*",
"ext-filter": "*"
"ext-filter": "*",
"ext-hash": "*"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.2",
"phpunit/phpunit": "^4.8 || ^5.7",
"doctrine/annotations": "^1.2"
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
"doctrine/annotations": "^1.2",
"phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.5.6",
"yoast/phpunit-polyfills": "^0.2.0"
},
"suggest": {
"psr/log": "For optional PSR-3 debug logging",
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
"ext-mbstring": "Needed to send email in multibyte encoding charset",
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
"psr/log": "For optional PSR-3 debug logging",
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
},
"autoload": {

View File

@ -1,4 +1,5 @@
<?php
/**
* PHPMailer - PHP email creation and transport class.
* PHP Version 5.5
@ -8,7 +9,7 @@
* @author Jim Jagielski (jimjag) <jimjag@gmail.com>
* @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
* @author Brent R. Matzelle (original founder)
* @copyright 2012 - 2017 Marcus Bointon
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
@ -16,6 +17,7 @@
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
*/
/**
* Get an OAuth2 token from an OAuth2 provider.
* * Install this script on your server so that it's accessible
@ -44,7 +46,7 @@ use Hayageek\OAuth2\Client\Provider\Yahoo;
use Stevenmaguire\OAuth2\Client\Provider\Microsoft;
if (!isset($_GET['code']) && !isset($_GET['provider'])) {
?>
?>
<html>
<body>Select Provider:<br/>
<a href='?provider=Google'>Google</a><br/>
@ -52,8 +54,8 @@ if (!isset($_GET['code']) && !isset($_GET['provider'])) {
<a href='?provider=Microsoft'>Microsoft/Outlook/Hotmail/Live/Office365</a><br/>
</body>
</html>
<?php
exit;
<?php
exit;
}
require 'vendor/autoload.php';

View File

@ -1,4 +1,5 @@
<?php
/**
* Afrikaans PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Arabic PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Azerbaijani PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Bosnian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
@ -23,4 +24,4 @@ $PHPMAILER_LANG['signing'] = 'Greška prilikom prijave: ';
$PHPMAILER_LANG['smtp_connect_failed'] = 'Spajanje na SMTP server nije uspjelo.';
$PHPMAILER_LANG['smtp_error'] = 'SMTP greška: ';
$PHPMAILER_LANG['variable_set'] = 'Nije moguće postaviti varijablu ili je vratiti nazad: ';
$PHPMAILER_LANG['extension_missing'] = 'Nedostaje ekstenzija: ';
$PHPMAILER_LANG['extension_missing'] = 'Nedostaje ekstenzija: ';

View File

@ -1,4 +1,5 @@
<?php
/**
* Belarusian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Bulgarian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Catalan PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Chinese PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Czech PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,10 +1,11 @@
<?php
/**
* Danish PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
* @author John Sebastian <jms@iwb.dk>
* Rewrite and extension of the work by Mikael Stokkebro <info@stokkebro.dk>
*
* Rewrite and extension of the work by Mikael Stokkebro <info@stokkebro.dk>
*
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Login mislykkedes.';

View File

@ -1,4 +1,5 @@
<?php
/**
* German PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
@ -15,6 +16,8 @@ $PHPMAILER_LANG['file_open'] = 'Dateifehler: Konnte folgende Datei ni
$PHPMAILER_LANG['from_failed'] = 'Die folgende Absenderadresse ist nicht korrekt: ';
$PHPMAILER_LANG['instantiate'] = 'Mail-Funktion konnte nicht initialisiert werden.';
$PHPMAILER_LANG['invalid_address'] = 'Die Adresse ist ungültig: ';
$PHPMAILER_LANG['invalid_hostentry'] = 'Ungültiger Hosteintrag: ';
$PHPMAILER_LANG['invalid_host'] = 'Ungültiger Host: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wird nicht unterstützt.';
$PHPMAILER_LANG['provide_address'] = 'Bitte geben Sie mindestens eine Empfängeradresse an.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP-Fehler: Die folgenden Empfänger sind nicht korrekt: ';

View File

@ -1,4 +1,5 @@
<?php
/**
* Greek PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Esperanto PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Spanish PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Estonian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Persian/Farsi PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Finnish PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Faroese PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* French PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
@ -19,6 +20,8 @@ $PHPMAILER_LANG['file_open'] = 'Ouverture du fichier impossible: '
$PHPMAILER_LANG['from_failed'] = 'L\'adresse d\'expéditeur suivante a échoué: ';
$PHPMAILER_LANG['instantiate'] = 'Impossible d\'instancier la fonction mail.';
$PHPMAILER_LANG['invalid_address'] = 'L\'adresse courriel n\'est pas valide: ';
$PHPMAILER_LANG['invalid_hostentry'] = 'L\'entrée hôte n\'est pas valide: ';
$PHPMAILER_LANG['invalid_host'] = 'L\'hôte n\'est pas valide: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.';
$PHPMAILER_LANG['provide_address'] = 'Vous devez fournir au moins une adresse de destinataire.';
$PHPMAILER_LANG['recipients_failed'] = 'Erreur SMTP: les destinataires suivants sont en erreur: ';

View File

@ -1,4 +1,5 @@
<?php
/**
* Galician PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Hebrew PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,10 +1,11 @@
<?php
/**
* Hindi PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
* @author Yash Karanke <mr.karanke@gmail.com>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP त्रुटि: प्रामाणिकता की जांच नहीं हो सका। ';
$PHPMAILER_LANG['connect_host'] = 'SMTP त्रुटि: SMTP सर्वर से कनेक्ट नहीं हो सका। ';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP त्रुटि: डेटा स्वीकार नहीं किया जाता है। ';

View File

@ -1,4 +1,5 @@
<?php
/**
* Croatian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Hungarian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,10 +1,11 @@
<?php
/**
* Armenian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
* @author Hrayr Grigoryan <hrayr@bits.am>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP -ի սխալ: չհաջողվեց ստուգել իսկությունը.';
$PHPMAILER_LANG['connect_host'] = 'SMTP -ի սխալ: չհաջողվեց կապ հաստատել SMTP սերվերի հետ.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP -ի սխալ: տվյալները ընդունված չեն.';

View File

@ -1,9 +1,11 @@
<?php
/**
* Indonesian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
* @author Cecep Prawiro <cecep.prawiro@gmail.com>
* @author @januridp
* @author Ian Mustafa <mail@ianmustafa.com>
*/
$PHPMAILER_LANG['authenticate'] = 'Kesalahan SMTP: Tidak dapat mengotentikasi.';
@ -11,17 +13,19 @@ $PHPMAILER_LANG['connect_host'] = 'Kesalahan SMTP: Tidak dapat terhubung
$PHPMAILER_LANG['data_not_accepted'] = 'Kesalahan SMTP: Data tidak diterima.';
$PHPMAILER_LANG['empty_message'] = 'Isi pesan kosong';
$PHPMAILER_LANG['encoding'] = 'Pengkodean karakter tidak dikenali: ';
$PHPMAILER_LANG['execute'] = 'Tidak dapat menjalankan proses : ';
$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses berkas : ';
$PHPMAILER_LANG['file_open'] = 'Kesalahan File: Berkas tidak dapat dibuka : ';
$PHPMAILER_LANG['from_failed'] = 'Alamat pengirim berikut mengakibatkan kesalahan : ';
$PHPMAILER_LANG['instantiate'] = 'Tidak dapat menginisialisasi fungsi surel';
$PHPMAILER_LANG['invalid_address'] = 'Gagal terkirim, alamat surel tidak benar : ';
$PHPMAILER_LANG['provide_address'] = 'Harus disediakan minimal satu alamat tujuan';
$PHPMAILER_LANG['execute'] = 'Tidak dapat menjalankan proses: ';
$PHPMAILER_LANG['file_access'] = 'Tidak dapat mengakses berkas: ';
$PHPMAILER_LANG['file_open'] = 'Kesalahan Berkas: Berkas tidak dapat dibuka: ';
$PHPMAILER_LANG['from_failed'] = 'Alamat pengirim berikut mengakibatkan kesalahan: ';
$PHPMAILER_LANG['instantiate'] = 'Tidak dapat menginisialisasi fungsi surel.';
$PHPMAILER_LANG['invalid_address'] = 'Gagal terkirim, alamat surel tidak sesuai: ';
$PHPMAILER_LANG['invalid_hostentry'] = 'Gagal terkirim, entri host tidak sesuai: ';
$PHPMAILER_LANG['invalid_host'] = 'Gagal terkirim, host tidak sesuai: ';
$PHPMAILER_LANG['provide_address'] = 'Harus tersedia minimal satu alamat tujuan';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tidak didukung';
$PHPMAILER_LANG['recipients_failed'] = 'Kesalahan SMTP: Alamat tujuan berikut menghasilkan kesalahan : ';
$PHPMAILER_LANG['signing'] = 'Kesalahan dalam tanda tangan : ';
$PHPMAILER_LANG['recipients_failed'] = 'Kesalahan SMTP: Alamat tujuan berikut menyebabkan kesalahan: ';
$PHPMAILER_LANG['signing'] = 'Kesalahan dalam penandatangan SSL: ';
$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() gagal.';
$PHPMAILER_LANG['smtp_error'] = 'Kesalahan pada pelayan SMTP : ';
$PHPMAILER_LANG['variable_set'] = 'Tidak dapat mengatur atau mengatur ulang variable : ';
$PHPMAILER_LANG['extension_missing'] = 'Ekstensi hilang: ';
$PHPMAILER_LANG['smtp_error'] = 'Kesalahan pada pelayan SMTP: ';
$PHPMAILER_LANG['variable_set'] = 'Tidak dapat mengatur atau mengatur ulang variabel: ';
$PHPMAILER_LANG['extension_missing'] = 'Ekstensi PHP tidak tersedia: ';

View File

@ -1,4 +1,5 @@
<?php
/**
* Italian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Japanese PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Georgian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Korean PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Lithuanian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Latvian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,9 +1,11 @@
<?php
/**
* Malagasy PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
* @author Hackinet <piyushjha8164@gmail.com>
*/
$PHPMAILER_LANG['authenticate'] = 'Hadisoana SMTP: Tsy nahomby ny fanamarinana.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Tsy afaka mampifandray amin\'ny mpampiantrano SMTP.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP diso: tsy voarakitra ny angona.';

View File

@ -1,4 +1,5 @@
<?php
/**
* Malaysian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Norwegian Bokmål PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Dutch PHPMailer language file: refer to PHPMailer.php for definitive list.
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Polish PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
@ -14,7 +15,7 @@ $PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: ';
$PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: ';
$PHPMAILER_LANG['from_failed'] = 'Następujący adres Nadawcy jest nieprawidłowy: ';
$PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, '.
$PHPMAILER_LANG['invalid_address'] = 'Nie można wysłać wiadomości, ' .
'następujący adres Odbiorcy jest nieprawidłowy: ';
$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email Odbiorcy.';
$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';

View File

@ -1,4 +1,5 @@
<?php
/**
* Portuguese (European) PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Brazilian Portuguese PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Romanian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Russian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Slovak PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,9 +1,11 @@
<?php
/**
* Slovene PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer
* @author Klemen Tušar <techouse@gmail.com>
* @author Filip Š <projects@filips.si>
* @author Blaž Oražem <blaz@orazem.si>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP napaka: Avtentikacija ni uspela.';
@ -17,8 +19,10 @@ $PHPMAILER_LANG['file_open'] = 'Ne morem odpreti datoteke: ';
$PHPMAILER_LANG['from_failed'] = 'Neveljaven e-naslov pošiljatelja: ';
$PHPMAILER_LANG['instantiate'] = 'Ne morem inicializirati mail funkcije.';
$PHPMAILER_LANG['invalid_address'] = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: ';
$PHPMAILER_LANG['invalid_hostentry'] = 'Neveljaven vnos gostitelja: ';
$PHPMAILER_LANG['invalid_host'] = 'Neveljaven gostitelj: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.';
$PHPMAILER_LANG['provide_address'] = 'Prosim vnesite vsaj enega naslovnika.';
$PHPMAILER_LANG['provide_address'] = 'Prosimo, vnesite vsaj enega naslovnika.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP napaka: Sledeči naslovniki so neveljavni: ';
$PHPMAILER_LANG['signing'] = 'Napaka pri podpisovanju: ';
$PHPMAILER_LANG['smtp_connect_failed'] = 'Ne morem vzpostaviti povezave s SMTP strežnikom.';

View File

@ -1,4 +1,5 @@
<?php
/**
* Serbian PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

View File

@ -1,4 +1,5 @@
<?php
/**
* Swedish PHPMailer language file: refer to English translation for definitive list
* @package PHPMailer

Some files were not shown because too many files have changed in this diff Show More