From fe1779213db301f5124df1caa590a193cc2f2195 Mon Sep 17 00:00:00 2001
From: icret <16373024+icret@users.noreply.github.com>
Date: Sat, 17 Jul 2021 13:27:19 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
更新新文件,修复压缩问题,更改一些样式。
---
api/api-web.php | 384 +++----
api/apiTest/index.php | 76 +-
api/del.php | 159 +--
api/index.php | 1 +
config/api_key.php | 44 +-
config/config.php | 638 ++++++------
libs/WaterMask.php | 652 ++++++------
libs/class.version.php | 122 +--
libs/compress/Imagick/class.Imgcompress.php | 246 ++---
libs/compress/TinyImg/TinyImg.php | 152 +--
libs/compress/TinyImg/cacert.pem | 262 ++---
libs/compress/function.compress.php | 108 +-
libs/compressing.php | 118 +--
libs/footer.php | 200 ++--
libs/function.php | 1010 +++++++++----------
libs/header.php | 105 +-
libs/list.php | 57 +-
libs/login.php | 78 +-
libs/logout.php | 52 +-
public/ad/top.html | 6 +-
public/images/alipay.jpg | Bin 0 -> 57450 bytes
public/images/wechat.jpg | Bin 0 -> 56603 bytes
public/static/lazyload.js | 199 +---
23 files changed, 2234 insertions(+), 2435 deletions(-)
create mode 100644 public/images/alipay.jpg
create mode 100644 public/images/wechat.jpg
diff --git a/api/api-web.php b/api/api-web.php
index 54fd123..3b98ef5 100644
--- a/api/api-web.php
+++ b/api/api-web.php
@@ -1,192 +1,192 @@
- new $.zui.Messager("删除成功!", {type: "success" // 定义颜色主题
- }).show();';
- header("refresh:1;"); // 1s后刷新当前页面
- } else {
- echo '
- ';
- header("refresh:1;"); // 1s后刷新当前页面
- }
-}
-?>
-
-
-
-
-
-
EasyImage2.0 快捷操作中心
-
- 此页面为常用快捷操作,目录保存以 年/月/日/ 递进,非必要请勿修改!否则会导致部分操作不可用。
- 当前软件环境信息:PHP版本:;PHP上传最大值:;POST上传最大值:;
-
-
-
-
-
-
-
-
-
-
-
- 当前可用Token列表: |
-
-
-
- ' . $value . ' | ';
- }
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
- new $.zui.Messager("删除成功!", {type: "success" // 定义颜色主题
+ }).show();';
+ header("refresh:1;"); // 1s后刷新当前页面
+ } else {
+ echo '
+ ';
+ header("refresh:1;"); // 1s后刷新当前页面
+ }
+}
+?>
+
+
+
+
+
+
EasyImage2.0 快捷操作中心
+
+ 此页面为常用快捷操作,目录保存以 年/月/日/ 递进,非必要请勿修改!否则会导致部分操作不可用。
+ 当前软件环境信息:PHP版本:;PHP上传最大值:;POST上传最大值:;
+
+
+
+
+
+
+
+
+
+
+
+ 当前可用Token列表: |
+
+
+
+ ' . $value . ' | ';
+ }
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+ - EasyImage2.0';
-require_once '../../libs/function.php';
-require_once APP_ROOT . '/libs/header.php';
-require_once APP_ROOT . '/config/api_key.php';
-
-// 如果关闭Api上传并且没有登录的情况下关闭测试接口
-if (!$config['apiStatus'] and !is_online()) {
- exit('');
-}
-
-?>
-
-
-
-
-
-
-
- - EasyImage2.0';
+require_once '../../libs/function.php';
+require_once APP_ROOT . '/libs/header.php';
+require_once APP_ROOT . '/config/api_key.php';
+
+// 如果关闭Api上传并且没有登录的情况下关闭测试接口
+if (!$config['apiStatus'] and !is_online()) {
+ exit('');
+}
+
+?>
+
+
+
+
+
+
+
+
-
-
-
-
- ';
-if (empty($_REQUEST)) {
- echo '
-
- ';
-} elseif (isset($_GET['url'])) {
- $img = $_GET['url'];
- echo '
-
-
-

-
';
-}
-
-// 解密删除
-if (isset($_GET['hash'])) {
- $delHash = $_GET['hash'];
- $delHash = urlHash($delHash, 1);
- getDel($delHash, 'hash');
-}
-
-// 检查登录后再处理url删除请求
-if (is_online()) {
- if (isset($_GET['url'])) {
- getDel($_GET['url'], 'url');
- }
-} else {
- if (isset($_GET['url'])) {
- echo '
-
- ';
- }
-}
-
-require_once APP_ROOT . '/libs/footer.php';
-?>
-
+ ';
+} elseif (isset($_GET['url'])) {
+ $img = $_GET['url'];
+ echo '
+
+
+
图片属性:'.@getimagesize($img)[0].'px X '.@getimagesize($img)[1].'px
+

+
';
+}
+
+// 解密删除
+if (isset($_GET['hash'])) {
+ $delHash = $_GET['hash'];
+ $delHash = urlHash($delHash, 1);
+ getDel($delHash, 'hash');
+}
+
+// 检查登录后再处理url删除请求
+if (is_online()) {
+ if (isset($_GET['url'])) {
+ getDel($_GET['url'], 'url');
+ }
+} else {
+ if (isset($_GET['url'])) {
+ echo '
+
+ ';
+ }
+}
+
+require_once APP_ROOT . '/libs/footer.php';
+?>
+
\ No newline at end of file
diff --git a/api/index.php b/api/index.php
index 79ac9fc..fecea54 100644
--- a/api/index.php
+++ b/api/index.php
@@ -2,6 +2,7 @@
require_once __DIR__ . './../libs/function.php';
require_once APP_ROOT . '/api/libs/apiFunction.php';
require_once APP_ROOT . '/libs/class.upload.php';
+require_once APP_ROOT . '/libs/WaterMask.php';
require_once APP_ROOT . '/config/api_key.php';
// 检查是否开启api上传
diff --git a/config/api_key.php b/config/api_key.php
index 6728b02..8b06fc8 100644
--- a/config/api_key.php
+++ b/config/api_key.php
@@ -1,22 +1,22 @@
- '****7pPVQc9P***4Jvd2zH*****'
-
-];
-
-/*
- * Token list 请在此填写需要配置Token的用户 前边编号有助于识别上传者ID
- * 格式: ID(数字,需要从0开始,顺序添加)=> Token(注意后边',')
- */
-
-$tokenList = array(
- 0 => '8337effca0ddfcd9c5899f3509b23657',
- 1 => '1c17b11693cb5ec63859b091c5b9c1b2',
-);
+ '****7pPVQc9P***4Jvd2zH*****'
+
+];
+
+/*
+ * Token list 请在此填写需要配置Token的用户 前边编号有助于识别上传者ID
+ * 格式: ID(数字,需要从0开始,顺序添加)=> Token(注意后边',')
+ */
+
+$tokenList = array(
+ 0 => '8337effca0ddfcd9c5899f3509b23657',
+ 1 => '1c17b11693cb5ec63859b091c5b9c1b2',
+);
diff --git a/config/config.php b/config/config.php
index 89f037f..ae94d24 100644
--- a/config/config.php
+++ b/config/config.php
@@ -1,320 +1,318 @@
- '简单图床 - EasyImage',
- // 网站关键字
- 'keywords' => '简单图床,easyimage,无数据库图床,PHP多图长传程序,自适应页面,HTML5,markdown,bbscode,一键复制',
- // 网站描述
- 'description' => '简单图床EasyImage是一款支持多文件上传的无数据库图床,可以完美替代PHP多图上传程序,最新html5自适应页面兼容手机电脑,上传后返回图片直链,markdown图片,论坛贴图bbscode链接,简单方便支持一键复制,支持多域名,api上传。',
- // 网站公告
- 'tips' => '本站仅做演示用,不定时清理图片,单文件≤5M,每次上传≤30张',
- /**
- * 网站域名与图片链接域名可以不同,比如A域名上传,可以返回B域名图片链接,A、B需绑定到同一空间下
- * 如果不变的话,下边2个填写成一样的!
- */
- // 网站域名,末尾不加"/"
- 'domain' => 'http://192.168.1.15',
- // 图片链接域名,末尾不加"/"
- 'imgurl' => 'http://192.168.1.15',
- /**
- * 存储路径 前后要加"/"
- * 可根据Apache/Nginx配置安全,参考:https://www.545141.com/981.html 或 README.md
- */
- 'path' => '/i/',
- // 最大上传限制 默认为5M 请使用工具转换Mb http://www.bejson.com/convert/filesize/
- 'maxSize' => 15242880,
- // 每次最多上传图片数
- 'maxUploadFiles' => 30,
- // 是否开启登录上传 开启:true 关闭:false
- 'mustLogin' => false,
- // 是否开启tinyfilemanager文件管理 开启:true 关闭:false
- 'tinyfilemanager' => true,
- // 登录上传和后台管理密码,管理用户名为:admin
- 'password' => 'admin@123',
- // 是否开启API上传 开启:true 关闭:false
- 'apiStatus' => true,
- // 是否开启水印:0关闭,1文字水印,2图片水印 不能使用动态gif添加水印
- 'watermark' => 0,
- // 水印文字内容
- 'waterText' => '简单图床 img.545141.com',
- /**
- * 水印位置
- * 0:随机位置,在1-8之间随机选取一个位置
- * 1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中
- * 5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右
- */
- 'waterPosition' => 8,
- // 水印文字颜色 rgba 末尾为透明度0-127 0为不透明
- 'textColor' => '47,79,79,0',
- // 水印文字大小
- 'textSize' => 16,
- // 字体路径 如果想改变字体,请选择支持中文的 GB/2312 字体
- 'textFont' => 'public/static/hkxzy.ttf',
- // 图片水印路径 支持GIF,JPG,BMP,PNG和PNG alpha
- 'waterImg' => 'public/images/watermark.png',
- // 允许上传的图片扩展名
- 'extensions' => "'bmp,jpg,png,tif,gif,pcx,tga,svg,webp,jpeg,tga,svg,ico'",
- // 轻微有损压缩图片 开启:true 关闭:false * 此压缩有可能使图片变大!特别是小图片 也有一定概率改变图片方向
- 'compress' => true,
- // 转换图片为指定格式 可选:''|'png'|'jpeg'|'gif'|'bmp';默认值:''
- 'imgConvert' => '',
- // 最大上传宽度
- 'maxWidth' => 10240,
- // 最大上传高度
- 'maxHeight' => 10240,
- // 允许上传的最小宽度
- 'minWidth' => 5,
- // 允许上传的最小高度
- 'minHeight' => 5,
- // 改变图片宽高 宽度和高度请设置 image_x image_y 开启:true 关闭:false 关闭下image_x和image_y设置不生效
- 'imgRatio' => false,
- // 缩减的最大高度
- 'image_x' => 1000,
- // 缩减的最大宽度
- 'image_y' => 800,
- // 开启静态文件CDN 开启:true 关闭:false
- 'static_cdn' => false,
- // 开启顶部广告 开启:true 关闭:false 如果想添加或修改广告请到 public/static/ad_top.html
- 'ad_top' => false,
- // 开启底部广告 开启:true 关闭:false 如果想添加或修改广告请到 public/static/ad_bot.html
- 'ad_bot' => false,
- // 开启游客预览(广场)开启:true 关闭:false
- 'showSwitch' => true,
- // 默认预览数量,可在网址后填写参数实时更改预览数量 如:https://img.545141.com/libs/list.php?num=3
- 'listNumber' => 20,
- // 上传框底部自定义信息,仅支持html格式 下面是举例:
- 'customize' => '
-
-
-
- ',
- // PHP插件检测-安全设置检测-版本检测 开启:true 关闭:false
- 'checkEnv' => true,
- // 当前版本
- 'version' => '2.2.1',
-);
-
-
-/*---------------tinyfilemanager管理配置(默认已经配置好了 你也可以自定义)-------------------*/
-
-/* Default Configuration
- * 默认配置
- */
-// $CONFIG = '{"lang":"zh-CN","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false}';
-
-/*
- * Auth with login/password
- * set true/false to enable/disable it
- * Is independent from IP white- and blacklisting
- * 开启登录
- */
-$use_auth = true;
-
-/* Login user name and password
- * Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)
- * Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html
- * 登录和管理密码 - Admin管理密码请在图床配置中修改
- */
-
-$auth_users = array(
- 'admin' => password_hash($config['password'], PASSWORD_DEFAULT), // 登录密码
- 'user' => '$2y$10$iPtSuvQnv0FnqdWdQsuWMOGxlul/VQzcKl3q1K7VU/QTw102IU5yi' //密码:CQ4CdBGjGJnA
- // 先写一个密码然后获取密码Hash填上去- https://tinyfilemanager.github.io/docs/pwd.html
-);
-
-/* Readonly users
- * e.g. array('users', 'guest', ...)
- * 只读的用户
- */
-
-$readonly_users = array(
- 'user'
-);
-
-/* set application theme
- * options - 'light' and 'dark'
- * 管理主题 白天 light/ 黑夜 dark
- */
-$theme = 'light';
-
-/* Enable highlight.js (https://highlightjs.org/) on view's page
- * 开启可预览代码js highlight.js (https://highlightjs.org/)
- */
-$use_highlightjs = true;
-
-/* highlight.js style
- * for dark theme use 'ir-black'
- * 代码预览样式 黑夜模式请使用 ir-black
- */
-$highlightjs_style = 'vs';
-
-/* Enable ace.js (https://ace.c9.io/) on view's page
- * 启用 ace.js (https://ace.c9.io/)
- */
-$edit_files = true;
-
-/* Default timezone for date() and time()
- * Doc - http://php.net/manual/en/timezones.php
- * 时区设置
- */
-$default_timezone = 'Asia/Shanghai'; // UTC
-
-/* Root path for file manager
- * use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
- * 文件的绝对路径 不出错就别动
- */
-$root_path = $_SERVER['DOCUMENT_ROOT'];
-
-/* Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
- * Will not working if $root_path will be outside of server document root
- * 文件夹相对路径
- */
-$root_url = '';
-
-// Server hostname. Can set manually if wrong
-// 当前域名 不出错就别动
-$http_host = $_SERVER['HTTP_HOST'];
-
-/* user specific directories
- *array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
- *用户路径
- */
-$directories_users = array('admin' => ltrim($config['path'], '/'), 'user' => ltrim($config['path']), '/');
-
-/* input encoding for iconv
- * html编码
- */
-$iconv_input_encoding = 'UTF-8';
-
-/* date() format for file modification date
- *Doc - https://www.php.net/manual/en/datetime.format.php
- * 时间格式 类似 20210419 22:39:06
- */
-$datetime_format = 'd.m.y H:i:s';
-
-/* Allowed file extensions for create and rename files
- * e.g. 'txt,html,css,js'
- * 允许创建的文件格式
- */
-$allowed_file_extensions = '';
-
-/* Allowed file extensions for upload files
- * e.g. 'gif,png,jpg,html,txt'
- * 运行创建上传的文件格式
- */
-$allowed_upload_extensions = '';
-
-/* Favicon path. This can be either a full url to an .PNG image, or a path based on the document root.
- *full path, e.g http://example.com/favicon.png
- * local path, e.g images/icons/favicon.png
- * Favicon图标路径
- */
-$favicon_path = './favicon.ico';
-
-/* Files and folders to excluded from listing
- * e.g. array('myfile.html', 'personal-folder', '*.php', ...)
- * 不显示的文件类型或文件夹
- */
-$exclude_items = array('tinyfilemanager.php', 'public/static/translation.json');
-
-/* Online office Docs Viewer
- * Availabe rules are 'google', 'microsoft' or false
- * google => View documents using Google Docs Viewer
- * microsoft => View documents using Microsoft Web Apps Viewer
- * false => disable online doc viewer
- * 文档查看引擎 'google', 'microsoft' or false
- */
-$online_viewer = 'google';
-
-/* Sticky Nav bar
- *true => enable sticky header
- * false => disable sticky header
- * 启用导航栏?
- */
-$sticky_navbar = true;
-
-
-/* max upload file size
- * 文件最大上传大小
- */
-$max_upload_size_bytes = 5000;
-
-/* Possible rules are 'OFF', 'AND' or 'OR'
- * OFF => Don't check connection IP, defaults to OFF
- * AND => Connection must be on the whitelist, and not on the blacklist
- * OR => Connection must be on the whitelist, or not on the blacklist
- * 开启登录IP管理
- * OFF 关闭 AND 需在白名单内 OR 必须是白名单内或者不是黑名单内
- */
-$ip_ruleset = 'OFF';
-
-/* Should users be notified of their block?
- * 告诉用户当前IP不可访问?
- */
-$ip_silent = true;
-
-/* IP-addresses, both ipv4 and ipv6
- * 登录白名单
- */
-$ip_whitelist = array(
- '127.0.0.1', // local ipv4
- '::1' // local ipv6
-);
-
-/* IP-addresses, both ipv4 and ipv6
- * 登录黑名单
- */
-$ip_blacklist = array(
- '0.0.0.0', // non-routable meta ipv4
- '::' // non-routable meta ipv6
-);
+ '简单图床 - EasyImage',
+ // 网站关键字
+ 'keywords' => '简单图床,easyimage,无数据库图床,PHP多图长传程序,自适应页面,HTML5,markdown,bbscode,一键复制',
+ // 网站描述
+ 'description' => '简单图床EasyImage是一款支持多文件上传的无数据库图床,可以完美替代PHP多图上传程序,最新html5自适应页面兼容手机电脑,上传后返回图片直链,markdown图片,论坛贴图bbscode链接,简单方便支持一键复制,支持多域名,api上传。',
+ // 网站公告
+ 'tips' => '本站仅做演示用,不定时清理图片,单文件≤5M,每次上传≤30张',
+ /**
+ * 网站域名与图片链接域名可以不同,比如A域名上传,可以返回B域名图片链接,A、B需绑定到同一空间下
+ * 如果不变的话,下边2个填写成一样的!
+ */
+ // 网站域名,末尾不加"/"
+ 'domain' => 'http://192.168.2.100',
+ // 图片链接域名,末尾不加"/"
+ 'imgurl' => 'http://192.168.2.100',
+ /**
+ * 存储路径 前后要加"/"
+ * 可根据Apache/Nginx配置安全,参考:https://www.545141.com/981.html 或 README.md
+ */
+ 'path' => '/i/',
+ // 最大上传限制 默认为5M 请使用工具转换Mb http://www.bejson.com/convert/filesize/
+ 'maxSize' => 15242880,
+ // 每次最多上传图片数
+ 'maxUploadFiles' => 30,
+ // 是否开启登录上传 开启:true 关闭:false
+ 'mustLogin' => false,
+ // 是否开启tinyfilemanager文件管理 开启:true 关闭:false
+ 'tinyfilemanager' => true,
+ // 登录上传和后台管理密码,管理用户名为:admin
+ 'password' => 'admin@123',
+ // 是否开启API上传 开启:true 关闭:false
+ 'apiStatus' => true,
+ // 是否开启水印:0关闭,1文字水印,2图片水印 不能使用动态gif添加水印
+ 'watermark' => 0,
+ // 水印文字内容
+ 'waterText' => '简单图床 img.545141.com',
+ /**
+ * 水印位置
+ * 0:随机位置,在1-8之间随机选取一个位置
+ * 1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中
+ * 5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右
+ */
+ 'waterPosition' => 8,
+ // 水印文字颜色 rgba 末尾为透明度0-127 0为不透明
+ 'textColor' => '47,79,79,0',
+ // 水印文字大小
+ 'textSize' => 16,
+ // 字体路径 如果想改变字体,请选择支持中文的 GB/2312 字体
+ 'textFont' => 'public/static/hkxzy.ttf',
+ // 图片水印路径 支持GIF,JPG,BMP,PNG和PNG alpha
+ 'waterImg' => 'public/images/watermark.png',
+ // 允许上传的图片扩展名
+ 'extensions' => "'bmp,jpg,png,tif,gif,pcx,tga,svg,webp,jpeg,tga,svg,ico'",
+ // 轻微有损压缩图片 开启:true 关闭:false * 此压缩有可能使图片变大!特别是小图片 也有一定概率改变图片方向
+ 'compress' => true,
+ // 转换图片为指定格式 可选:''|'png'|'jpeg'|'gif'|'bmp';默认值:''
+ 'imgConvert' => '',
+ // 最大上传宽度
+ 'maxWidth' => 10240,
+ // 最大上传高度
+ 'maxHeight' => 10240,
+ // 允许上传的最小宽度
+ 'minWidth' => 5,
+ // 允许上传的最小高度
+ 'minHeight' => 5,
+ // 改变图片宽高 宽度和高度请设置 image_x image_y 开启:true 关闭:false 关闭下image_x和image_y设置不生效
+ 'imgRatio' => false,
+ // 缩减的最大高度
+ 'image_x' => 1000,
+ // 缩减的最大宽度
+ 'image_y' => 800,
+ // 开启静态文件CDN 开启:true 关闭:false
+ 'static_cdn' => false,
+ // 开启顶部广告 开启:true 关闭:false 如果想添加或修改广告请到 public/static/ad_top.html
+ 'ad_top' => false,
+ // 开启底部广告 开启:true 关闭:false 如果想添加或修改广告请到 public/static/ad_bot.html
+ 'ad_bot' => false,
+ // 开启游客预览(广场)开启:true 关闭:false
+ 'showSwitch' => true,
+ // 默认预览数量,可在网址后填写参数实时更改预览数量 如:https://img.545141.com/libs/list.php?num=3
+ 'listNumber' => 20,
+ // 上传框底部自定义信息,仅支持html格式 下面是举例:
+ 'customize' => '
+
+
+
+ ',
+ // PHP插件检测-安全设置检测-版本检测 开启:true 关闭:false
+ 'checkEnv' => true,
+ // 当前版本
+ 'version' => '2.2.1',
+);
+
+
+/*---------------tinyfilemanager管理配置(默认已经配置好了 你也可以自定义)-------------------*/
+
+/* Default Configuration
+ * 默认配置
+ */
+// $CONFIG = '{"lang":"zh-CN","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false}';
+
+/*
+ * Auth with login/password
+ * set true/false to enable/disable it
+ * Is independent from IP white- and blacklisting
+ * 开启登录
+ */
+$use_auth = true;
+
+/* Login user name and password
+ * Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)
+ * Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html
+ * 登录和管理密码 - Admin管理密码请在图床配置中修改
+ */
+
+$auth_users = array(
+ 'admin' => password_hash($config['password'], PASSWORD_DEFAULT), // 登录密码
+ 'user' => '$2y$10$iPtSuvQnv0FnqdWdQsuWMOGxlul/VQzcKl3q1K7VU/QTw102IU5yi' //密码:CQ4CdBGjGJnA
+ // 先写一个密码然后获取密码Hash填上去- https://tinyfilemanager.github.io/docs/pwd.html
+);
+
+/* Readonly users
+ * e.g. array('users', 'guest', ...)
+ * 只读的用户
+ */
+
+$readonly_users = array(
+ 'user'
+);
+
+/* set application theme
+ * options - 'light' and 'dark'
+ * 管理主题 白天 light/ 黑夜 dark
+ */
+$theme = 'light';
+
+/* Enable highlight.js (https://highlightjs.org/) on view's page
+ * 开启可预览代码js highlight.js (https://highlightjs.org/)
+ */
+$use_highlightjs = true;
+
+/* highlight.js style
+ * for dark theme use 'ir-black'
+ * 代码预览样式 黑夜模式请使用 ir-black
+ */
+$highlightjs_style = 'vs';
+
+/* Enable ace.js (https://ace.c9.io/) on view's page
+ * 启用 ace.js (https://ace.c9.io/)
+ */
+$edit_files = true;
+
+/* Default timezone for date() and time()
+ * Doc - http://php.net/manual/en/timezones.php
+ * 时区设置
+ */
+$default_timezone = 'Asia/Shanghai'; // UTC
+
+/* Root path for file manager
+ * use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
+ * 文件的绝对路径 不出错就别动
+ */
+$root_path = $_SERVER['DOCUMENT_ROOT'];
+
+/* Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
+ * Will not working if $root_path will be outside of server document root
+ * 文件夹相对路径
+ */
+$root_url = '';
+
+// Server hostname. Can set manually if wrong
+// 当前域名 不出错就别动
+$http_host = $_SERVER['HTTP_HOST'];
+
+/* user specific directories
+ *array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
+ *用户路径
+ */
+$directories_users = array('admin' => ltrim($config['path'], '/'), 'user' => ltrim($config['path']), '/');
+
+/* input encoding for iconv
+ * html编码
+ */
+$iconv_input_encoding = 'UTF-8';
+
+/* date() format for file modification date
+ *Doc - https://www.php.net/manual/en/datetime.format.php
+ * 时间格式 类似 20210419 22:39:06
+ */
+$datetime_format = 'd.m.y H:i:s';
+
+/* Allowed file extensions for create and rename files
+ * e.g. 'txt,html,css,js'
+ * 允许创建的文件格式
+ */
+$allowed_file_extensions = '';
+
+/* Allowed file extensions for upload files
+ * e.g. 'gif,png,jpg,html,txt'
+ * 运行创建上传的文件格式
+ */
+$allowed_upload_extensions = '';
+
+/* Favicon path. This can be either a full url to an .PNG image, or a path based on the document root.
+ *full path, e.g http://example.com/favicon.png
+ * local path, e.g images/icons/favicon.png
+ * Favicon图标路径
+ */
+$favicon_path = './favicon.ico';
+
+/* Files and folders to excluded from listing
+ * e.g. array('myfile.html', 'personal-folder', '*.php', ...)
+ * 不显示的文件类型或文件夹
+ */
+$exclude_items = array('tinyfilemanager.php', 'public/static/translation.json');
+
+/* Online office Docs Viewer
+ * Availabe rules are 'google', 'microsoft' or false
+ * google => View documents using Google Docs Viewer
+ * microsoft => View documents using Microsoft Web Apps Viewer
+ * false => disable online doc viewer
+ * 文档查看引擎 'google', 'microsoft' or false
+ */
+$online_viewer = 'google';
+
+/* Sticky Nav bar
+ *true => enable sticky header
+ * false => disable sticky header
+ * 启用导航栏?
+ */
+$sticky_navbar = true;
+
+
+/* max upload file size
+ * 文件最大上传大小
+ */
+$max_upload_size_bytes = 5000;
+
+/* Possible rules are 'OFF', 'AND' or 'OR'
+ * OFF => Don't check connection IP, defaults to OFF
+ * AND => Connection must be on the whitelist, and not on the blacklist
+ * OR => Connection must be on the whitelist, or not on the blacklist
+ * 开启登录IP管理
+ * OFF 关闭 AND 需在白名单内 OR 必须是白名单内或者不是黑名单内
+ */
+$ip_ruleset = 'OFF';
+
+/* Should users be notified of their block?
+ * 告诉用户当前IP不可访问?
+ */
+$ip_silent = true;
+
+/* IP-addresses, both ipv4 and ipv6
+ * 登录白名单
+ */
+$ip_whitelist = array(
+ '127.0.0.1', // local ipv4
+ '::1' // local ipv6
+);
+
+/* IP-addresses, both ipv4 and ipv6
+ * 登录黑名单
+ */
+$ip_blacklist = array(
+ '0.0.0.0', // non-routable meta ipv4
+ '::' // non-routable meta ipv6
+);
diff --git a/libs/WaterMask.php b/libs/WaterMask.php
index 3f45c2d..f189781 100644
--- a/libs/WaterMask.php
+++ b/libs/WaterMask.php
@@ -1,326 +1,326 @@
- false, 'msg' => '请指定$src');
- }
-
- $temp = pathinfo($src);
- # 文件名
- $name = $temp["basename"];
- # 文件所在的文件夹
- $dir = $temp["dirname"];
- # 文件扩展名
- $extension = $temp["extension"];
- # 缩略图保存路径,新的文件名为*.thumb.jpg
- $savepath = "{$dir}/thumb_{$name}";
-
- # 获取图片的基本信息
- $info = getimagesize($src);
- # 获取图片宽度
- $width = $info[0];
- # 获取图片高度
- $height = $info[1];
- if (!empty($w)) {
- $temp_w = $w; # 计算原图缩放后的宽度
- $temp_h = intval($height * ($w / $width)); # 计算原图缩放后的高度
- } else {
- $temp_w = intval($width * ($h / $height)); # 计算原图缩放后的宽度
- $temp_h = $h; # 计算原图缩放后的高度
- }
-
- # 创建画布
- $temp_img = imagecreatetruecolor($temp_w, $temp_h);
- @imagealphablending($temp_img, false); //这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;3-2
- @imagesavealpha($temp_img, true); //这里很重要,意思是不要丢了$thumb图像的透明色;3-3
- switch ($info[2]) {
- case 1:
- $im = imagecreatefromgif($src);
- imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
- imagegif($temp_img, $savepath, 100);
- break;
- case 2:
- $im = imagecreatefromjpeg($src);
- imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
- imagejpeg($temp_img, $savepath, 100);
- break;
- case 3:
- $im = imagecreatefrompng($src);
- imagesavealpha($im, true); //这里很重要;3-1
- imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
- imagepng($temp_img, $savepath, 100);
- break;
- }
- imagedestroy($im);
- return $savepath;
- }
-
- /**
- * 图片添加水印
- * @param string $src 1、图片相对路径或绝对路径 2、以逗号隔开的宽高值('800,600')
- * @param array 属性值:
- * res:水印资源(1、图片相对路径或绝对路径,2、字符串)
- * pos:图片水印添加的位置,取值范围:0~9
- * 0:随机位置,在1~8之间随机选取一个位置
- * 1:顶部居左 2:顶部居中
- * 3:顶部居右 4:左边居中
- * 5:图片中心 6:右边居中
- * 7:底部居左 8:底部居中
- * 9:底部居右
- * font: 字体库(相对路径或绝对路径)
- * fontSize:文字大小
- * color: 水印文字的字体颜色(255,255,255)
- * name: 图片保存名称
- * @return array code:状态、 msg:提示信息、 url:图片地址
- **/
- public static function setWater($src, $arr = array())
- {
- if (empty($src)) {
- return array('code' => false, 'msg' => '请指定$src');
- }
-
- $def = array(
- 'res' => '小川编程',
- 'pos' => 7,
- 'font' => './1.ttf',
- 'fontSize' => 24,
- 'color' => '255,255,255,0',
- 'name' => null,
- );
- $def = array_merge($def, $arr);
- /**
- * 判断$src是不是图片,不是就创建画布
- */
- if (!file_exists($src)) {
- if (empty($def['name'])) {
- return array('code' => false, 'msg' => '请指定图片名称');
- }
-
- # 计算画布宽高
- $obj = explode(',', $src);
- if (count($obj) != 2) {
- return array(
- 'code' => false,
- 'msg' => '请给正确的宽高,或你给的不是一个有效的地址!'
- );
- }
-
- $srcImg_w = is_numeric($obj[0]) ? $obj[0] : 400;
- $srcImg_h = is_numeric($obj[1]) ? $obj[1] : 300;
- # 创建透明画布 一共3个步骤,在下边有标记
- $dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
- @imagealphablending($dst_img, false); //这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;3-2
- @imagesavealpha($dst_img, true); //这里很重要,意思是不要丢了$thumb图像的透明色;3-3
- } else {
- # 获取图片信息
- $srcInfo = @getimagesize($src);
- $srcImg_w = $srcInfo[0];
- $srcImg_h = $srcInfo[1];
- if (empty($def['name'])) {
- $def['name'] = $src;
- }
-
- # 动态的把图片导入内存中
- switch ($srcInfo[2]) {
- case 1:
- $dst_img = imagecreatefromgif($src);
- break;
-
- case 2:
- $dst_img = imagecreatefromjpeg($src);
- break;
-
- case 3:
- $dst_img = imagecreatefrompng($src);
- imagesavealpha($dst_img, true); //这里很重要;3-1
- break;
-
- default:
- return array('code' => false, 'msg' => '目标图片类型错误');
- exit;
- }
- }
- /**
- * 计算出水印宽高
- */
- if (!file_exists($def['res'])) {
- if (!file_exists($def['font'])) {
- return array('code' => false, 'msg' => '字体库不存在');
- }
-
- $box = @imagettfbbox($def['fontSize'], 0, $def['font'], $def['res']);
- $logow = max($box[2], $box[4]) - min($box[0], $box[6]);
- $logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
- } else {
- $resInfo = @getimagesize($def['res']);
- $res_w = $resInfo[0];
- $res_h = $resInfo[1];
- if ($srcImg_w < $res_w || $srcImg_h < $res_h) {
- return array('code' => false, 'msg' => '水印图片过大');
- }
-
- # 动态的把图片导入内存中
- switch ($resInfo[2]) {
- case 1:
- $markim = imagecreatefromgif($def['res']);
- break;
-
- case 2:
- $markim = imagecreatefromjpeg($def['res']);
- break;
-
- case 3:
- $markim = imagecreatefrompng($def['res']);
- break;
-
- default:
- return array('code' => false, 'msg' => '水印图片类型错误');
- exit;
- }
- $logow = $res_w;
- $logoh = $res_h;
- }
- /**
- * 计算水印显示位置
- */
- if ($def['pos'] == 0) {
- $def['pos'] = rand(1, 9);
- }
-
- switch ($def['pos']) {
- case 1:
- $x = +10;
- $y = +10 + $def['fontSize'];
- break;
-
- case 2:
- $x = ($srcImg_w - $logow) / 2;
- $y = +10 + $def['fontSize'];
- break;
-
- case 3:
- $x = $srcImg_w - $logow - 10;
- $y = +10 + $def['fontSize'];
- break;
-
- case 4:
- $x = +10;
- $y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
- break;
-
- case 5:
- $x = ($srcImg_w - $logow) / 2;
- $y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
- break;
-
- case 6:
- $x = $srcImg_w - $logow - 10;
- $y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
- break;
-
- case 7:
- $x = +10;
- $y = $srcImg_h - $logoh + $def['fontSize'] - 10;
- break;
-
- case 8:
- $x = ($srcImg_w - $logow) / 2;
- $y = $srcImg_h - $logoh + $def['fontSize'] - 10;
- break;
-
- case 9:
- $x = $srcImg_w - $logow - 10;
- $y = $srcImg_h - $logoh + $def['fontSize'] - 10;
- break;
-
- default:
- return array('code' => false, 'msg' => '水印位置不支持');
- exit;
- }
- /**
- * 把图片水印或文字水印,加到目标图片中
- */
- if (file_exists($def['res'])) {
- imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
- imagedestroy($markim);
- } else {
- $rgb = explode(',', $def['color']);
- if (count($rgb) != 4) {
- return array('code' => false, 'msg' => '请给正确的字体颜色');
- }
-
- if (!is_numeric($rgb[0]) || !is_numeric($rgb[1]) || !is_numeric($rgb[2]) || !is_numeric($rgb[3])) {
- return array('code' => false, 'msg' => '请给正确的字体颜色');
- }
-
- if ($rgb[0] > 255 || $rgb[1] > 255 || $rgb[2] > 255 || $rgb[3] > 127) {
- return array('code' => false, 'msg' => '请给正确的字体颜色');
- }
-
- $def['color'] = imagecolorallocatealpha($dst_img, $rgb[0], $rgb[1], $rgb[2], $rgb[3]);
- imagettftext(
- $dst_img,
- $def['fontSize'],
- 0,
- $x,
- $y,
- $def['color'],
- $def['font'],
- $def['res']
- );
- }
- /**
- * 保存处理过的图片(有水印了的图片)
- */
- $name = explode('.', $def['name']);
- $num = count($name) - 1;
- switch (strtolower($name[$num])) {
- case 'jpeg':
- imagejpeg($dst_img, $def['name']);
- break;
- case 'jpg':
- imagejpeg($dst_img, $def['name']);
- break;
- case 'png':
- imagepng($dst_img, $def['name']);
- break;
- case 'gif':
- imagegif($dst_img, $def['name']);
- break;
- default:
- return array('code' => false, 'msg' => '保存图片类型有误');
- break;
- }
- # 销毁图片内存资源
- imagedestroy($dst_img);
- return array('code' => true, 'msg' => '添加水印成功', 'url' => $def['name']);
- }
-}
+ false, 'msg' => '请指定$src');
+ }
+
+ $temp = pathinfo($src);
+ # 文件名
+ $name = $temp["basename"];
+ # 文件所在的文件夹
+ $dir = $temp["dirname"];
+ # 文件扩展名
+ $extension = $temp["extension"];
+ # 缩略图保存路径,新的文件名为*.thumb.jpg
+ $savepath = "{$dir}/thumb_{$name}";
+
+ # 获取图片的基本信息
+ $info = getimagesize($src);
+ # 获取图片宽度
+ $width = $info[0];
+ # 获取图片高度
+ $height = $info[1];
+ if (!empty($w)) {
+ $temp_w = $w; # 计算原图缩放后的宽度
+ $temp_h = intval($height * ($w / $width)); # 计算原图缩放后的高度
+ } else {
+ $temp_w = intval($width * ($h / $height)); # 计算原图缩放后的宽度
+ $temp_h = $h; # 计算原图缩放后的高度
+ }
+
+ # 创建画布
+ $temp_img = imagecreatetruecolor($temp_w, $temp_h);
+ @imagealphablending($temp_img, false); //这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;3-2
+ @imagesavealpha($temp_img, true); //这里很重要,意思是不要丢了$thumb图像的透明色;3-3
+ switch ($info[2]) {
+ case 1:
+ $im = imagecreatefromgif($src);
+ imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
+ imagegif($temp_img, $savepath, 100);
+ break;
+ case 2:
+ $im = imagecreatefromjpeg($src);
+ imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
+ imagejpeg($temp_img, $savepath, 100);
+ break;
+ case 3:
+ $im = imagecreatefrompng($src);
+ imagesavealpha($im, true); //这里很重要;3-1
+ imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
+ imagepng($temp_img, $savepath, 100);
+ break;
+ }
+ imagedestroy($im);
+ return $savepath;
+ }
+
+ /**
+ * 图片添加水印
+ * @param string $src 1、图片相对路径或绝对路径 2、以逗号隔开的宽高值('800,600')
+ * @param array 属性值:
+ * res:水印资源(1、图片相对路径或绝对路径,2、字符串)
+ * pos:图片水印添加的位置,取值范围:0~9
+ * 0:随机位置,在1~8之间随机选取一个位置
+ * 1:顶部居左 2:顶部居中
+ * 3:顶部居右 4:左边居中
+ * 5:图片中心 6:右边居中
+ * 7:底部居左 8:底部居中
+ * 9:底部居右
+ * font: 字体库(相对路径或绝对路径)
+ * fontSize:文字大小
+ * color: 水印文字的字体颜色(255,255,255)
+ * name: 图片保存名称
+ * @return array code:状态、 msg:提示信息、 url:图片地址
+ **/
+ public static function setWater($src, $arr = array())
+ {
+ if (empty($src)) {
+ return array('code' => false, 'msg' => '请指定$src');
+ }
+
+ $def = array(
+ 'res' => '小川编程',
+ 'pos' => 7,
+ 'font' => './1.ttf',
+ 'fontSize' => 24,
+ 'color' => '255,255,255,0',
+ 'name' => null,
+ );
+ $def = array_merge($def, $arr);
+ /**
+ * 判断$src是不是图片,不是就创建画布
+ */
+ if (!file_exists($src)) {
+ if (empty($def['name'])) {
+ return array('code' => false, 'msg' => '请指定图片名称');
+ }
+
+ # 计算画布宽高
+ $obj = explode(',', $src);
+ if (count($obj) != 2) {
+ return array(
+ 'code' => false,
+ 'msg' => '请给正确的宽高,或你给的不是一个有效的地址!'
+ );
+ }
+
+ $srcImg_w = is_numeric($obj[0]) ? $obj[0] : 400;
+ $srcImg_h = is_numeric($obj[1]) ? $obj[1] : 300;
+ # 创建透明画布 一共3个步骤,在下边有标记
+ $dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
+ @imagealphablending($dst_img, false); //这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;3-2
+ @imagesavealpha($dst_img, true); //这里很重要,意思是不要丢了$thumb图像的透明色;3-3
+ } else {
+ # 获取图片信息
+ $srcInfo = @getimagesize($src);
+ $srcImg_w = $srcInfo[0];
+ $srcImg_h = $srcInfo[1];
+ if (empty($def['name'])) {
+ $def['name'] = $src;
+ }
+
+ # 动态的把图片导入内存中
+ switch ($srcInfo[2]) {
+ case 1:
+ $dst_img = imagecreatefromgif($src);
+ break;
+
+ case 2:
+ $dst_img = imagecreatefromjpeg($src);
+ break;
+
+ case 3:
+ $dst_img = imagecreatefrompng($src);
+ imagesavealpha($dst_img, true); //这里很重要;3-1
+ break;
+
+ default:
+ return array('code' => false, 'msg' => '目标图片类型错误');
+ exit;
+ }
+ }
+ /**
+ * 计算出水印宽高
+ */
+ if (!file_exists($def['res'])) {
+ if (!file_exists($def['font'])) {
+ return array('code' => false, 'msg' => '字体库不存在');
+ }
+
+ $box = @imagettfbbox($def['fontSize'], 0, $def['font'], $def['res']);
+ $logow = max($box[2], $box[4]) - min($box[0], $box[6]);
+ $logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
+ } else {
+ $resInfo = @getimagesize($def['res']);
+ $res_w = $resInfo[0];
+ $res_h = $resInfo[1];
+ if ($srcImg_w < $res_w || $srcImg_h < $res_h) {
+ return array('code' => false, 'msg' => '水印图片过大');
+ }
+
+ # 动态的把图片导入内存中
+ switch ($resInfo[2]) {
+ case 1:
+ $markim = imagecreatefromgif($def['res']);
+ break;
+
+ case 2:
+ $markim = imagecreatefromjpeg($def['res']);
+ break;
+
+ case 3:
+ $markim = imagecreatefrompng($def['res']);
+ break;
+
+ default:
+ return array('code' => false, 'msg' => '水印图片类型错误');
+ exit;
+ }
+ $logow = $res_w;
+ $logoh = $res_h;
+ }
+ /**
+ * 计算水印显示位置
+ */
+ if ($def['pos'] == 0) {
+ $def['pos'] = rand(1, 9);
+ }
+
+ switch ($def['pos']) {
+ case 1:
+ $x = +10;
+ $y = +10 + $def['fontSize'];
+ break;
+
+ case 2:
+ $x = ($srcImg_w - $logow) / 2;
+ $y = +10 + $def['fontSize'];
+ break;
+
+ case 3:
+ $x = $srcImg_w - $logow - 10;
+ $y = +10 + $def['fontSize'];
+ break;
+
+ case 4:
+ $x = +10;
+ $y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
+ break;
+
+ case 5:
+ $x = ($srcImg_w - $logow) / 2;
+ $y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
+ break;
+
+ case 6:
+ $x = $srcImg_w - $logow - 10;
+ $y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
+ break;
+
+ case 7:
+ $x = +10;
+ $y = $srcImg_h - $logoh + $def['fontSize'] - 10;
+ break;
+
+ case 8:
+ $x = ($srcImg_w - $logow) / 2;
+ $y = $srcImg_h - $logoh + $def['fontSize'] - 10;
+ break;
+
+ case 9:
+ $x = $srcImg_w - $logow - 10;
+ $y = $srcImg_h - $logoh + $def['fontSize'] - 10;
+ break;
+
+ default:
+ return array('code' => false, 'msg' => '水印位置不支持');
+ exit;
+ }
+ /**
+ * 把图片水印或文字水印,加到目标图片中
+ */
+ if (file_exists($def['res'])) {
+ imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
+ imagedestroy($markim);
+ } else {
+ $rgb = explode(',', $def['color']);
+ if (count($rgb) != 4) {
+ return array('code' => false, 'msg' => '请给正确的字体颜色');
+ }
+
+ if (!is_numeric($rgb[0]) || !is_numeric($rgb[1]) || !is_numeric($rgb[2]) || !is_numeric($rgb[3])) {
+ return array('code' => false, 'msg' => '请给正确的字体颜色');
+ }
+
+ if ($rgb[0] > 255 || $rgb[1] > 255 || $rgb[2] > 255 || $rgb[3] > 127) {
+ return array('code' => false, 'msg' => '请给正确的字体颜色');
+ }
+
+ $def['color'] = imagecolorallocatealpha($dst_img, $rgb[0], $rgb[1], $rgb[2], $rgb[3]);
+ imagettftext(
+ $dst_img,
+ $def['fontSize'],
+ 0,
+ $x,
+ $y,
+ $def['color'],
+ $def['font'],
+ $def['res']
+ );
+ }
+ /**
+ * 保存处理过的图片(有水印了的图片)
+ */
+ $name = explode('.', $def['name']);
+ $num = count($name) - 1;
+ switch (strtolower($name[$num])) {
+ case 'jpeg':
+ imagejpeg($dst_img, $def['name']);
+ break;
+ case 'jpg':
+ imagejpeg($dst_img, $def['name']);
+ break;
+ case 'png':
+ imagepng($dst_img, $def['name']);
+ break;
+ case 'gif':
+ imagegif($dst_img, $def['name']);
+ break;
+ default:
+ return array('code' => false, 'msg' => '保存图片类型有误');
+ break;
+ }
+ # 销毁图片内存资源
+ imagedestroy($dst_img);
+ return array('code' => true, 'msg' => '添加水印成功', 'url' => $def['name']);
+ }
+}
diff --git a/libs/class.version.php b/libs/class.version.php
index 0178299..13cad38 100644
--- a/libs/class.version.php
+++ b/libs/class.version.php
@@ -1,62 +1,62 @@
-url = $url;
- }
-
- public function readJson()
- {
- if (file_exists(__DIR__ . '/verson.json')) {
- $file = fopen(__DIR__ . '/verson.json', 'r');
- $test = fread($file, filesize(__DIR__ . '/verson.json'));
- $verson = json_decode($test, true);
- return $verson['tag_name'];
- fclose($file);
- } else {
- $this->downJson();
- }
- }
-
- public function downJson()
- {
-
- $verson = $this->geturl($this->url);
- $verson = json_decode($verson, true);
- $file = fopen(__DIR__ . '/verson.json', 'w+');
- fwrite($file, $verson);
- fclose($file);
- }
-
- public function geturl($url)
- {
- $headerArray = array("Content-type:application/json;", "Accept:application/json");
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
- curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36');
- $output = curl_exec($ch);
- curl_close($ch);
- $output = json_encode($output, true);
- return $output;
- }
-}
-
-/////////// TEST /////////
-/*
-$url = "https://api.github.com/repositories/188228357/releases/latest";
-$test = new getVerson($url);
-echo $test->readJson();
+url = $url;
+ }
+
+ public function readJson()
+ {
+ if (file_exists(__DIR__ . '/verson.json')) {
+ $file = fopen(__DIR__ . '/verson.json', 'r');
+ $test = fread($file, filesize(__DIR__ . '/verson.json'));
+ $verson = json_decode($test, true);
+ return $verson['tag_name'];
+ fclose($file);
+ } else {
+ $this->downJson();
+ }
+ }
+
+ public function downJson()
+ {
+
+ $verson = $this->geturl($this->url);
+ $verson = json_decode($verson, true);
+ $file = fopen(__DIR__ . '/verson.json', 'w+');
+ fwrite($file, $verson);
+ fclose($file);
+ }
+
+ public function geturl($url)
+ {
+ $headerArray = array("Content-type:application/json;", "Accept:application/json");
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
+ curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36');
+ $output = curl_exec($ch);
+ curl_close($ch);
+ $output = json_encode($output, true);
+ return $output;
+ }
+}
+
+/////////// TEST /////////
+/*
+$url = "https://api.github.com/repositories/188228357/releases/latest";
+$test = new getVerson($url);
+echo $test->readJson();
*/
\ No newline at end of file
diff --git a/libs/compress/Imagick/class.Imgcompress.php b/libs/compress/Imagick/class.Imgcompress.php
index 8bfbaf7..3534787 100644
--- a/libs/compress/Imagick/class.Imgcompress.php
+++ b/libs/compress/Imagick/class.Imgcompress.php
@@ -1,123 +1,123 @@
-src = $src;
- $this->percent = $percent;
- }
-
- /** 高清压缩图片
- * @param string $saveName 提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示
- */
- public function compressImg($saveName = '')
- {
- $this->_openImage();
- if (!empty($saveName)) $this->_saveImage($saveName); //保存
- else $this->_showImage();
- }
-
- /**
- * 内部:打开图片
- */
- private function _openImage()
- {
- list($width, $height, $type, $attr) = getimagesize($this->src);
- $this->imageinfo = array(
- 'width' => $width,
- 'height' => $height,
- 'type' => image_type_to_extension($type, false),
- 'attr' => $attr
- );
- $fun = "imagecreatefrom" . $this->imageinfo['type'];
- $this->image = $fun($this->src);
- $this->_thumpImage();
- }
-
- /**
- * 内部:操作图片
- */
- private function _thumpImage()
- {
- $new_width = $this->imageinfo['width'] * $this->percent;
- $new_height = $this->imageinfo['height'] * $this->percent;
- $image_thump = imagecreatetruecolor($new_width, $new_height);
- /**
- * 保留图片透明通道
- * 简单图床 EasyImage 2.0 2021-5-9 21:48:59
- * 参考: https://www.imooc.com/wenda/detail/581249
- */
- imagealphablending($image_thump, false);
- imagesavealpha($image_thump, true);
-
- //将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
- imagecopyresampled($image_thump, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->imageinfo['width'], $this->imageinfo['height']);
-
- imagedestroy($this->image);
- $this->image = $image_thump;
- }
-
- /**
- * 输出图片:保存图片则用saveImage()
- */
- private function _showImage()
- {
- header('Content-Type: image/' . $this->imageinfo['type']);
- $funcs = "image" . $this->imageinfo['type'];
- $funcs($this->image);
- }
-
- /**
- * 保存图片到硬盘:
- * @param string $dstImgName 1、可指定字符串不带后缀的名称,使用源图扩展名 。2、直接指定目标图片名带扩展名。
- */
- private function _saveImage($dstImgName)
- {
- if (empty($dstImgName)) return false;
- $allowImgs = array('.jpg', '.jpeg', '.png', '.bmp', '.wbmp', '.gif'); //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
- $dstExt = strrchr($dstImgName, ".");
- $sourseExt = strrchr($this->src, ".");
- if (!empty($dstExt)) $dstExt = strtolower($dstExt);
- if (!empty($sourseExt)) $sourseExt = strtolower($sourseExt);
-
- //有指定目标名扩展名
- if (!empty($dstExt) && in_array($dstExt, $allowImgs)) {
- $dstName = $dstImgName;
- } elseif (!empty($sourseExt) && in_array($sourseExt, $allowImgs)) {
- $dstName = $dstImgName . $sourseExt;
- } else {
- $dstName = $dstImgName . $this->imageinfo['type'];
- }
- $funcs = "image" . $this->imageinfo['type'];
- $funcs($this->image, $dstName);
- }
-
- /**
- * 销毁图片
- */
- public function __destruct()
- {
- imagedestroy($this->image);
- }
-}
+src = $src;
+ $this->percent = $percent;
+ }
+
+ /** 高清压缩图片
+ * @param string $saveName 提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示
+ */
+ public function compressImg($saveName = '')
+ {
+ $this->_openImage();
+ if (!empty($saveName)) $this->_saveImage($saveName); //保存
+ else $this->_showImage();
+ }
+
+ /**
+ * 内部:打开图片
+ */
+ private function _openImage()
+ {
+ list($width, $height, $type, $attr) = getimagesize($this->src);
+ $this->imageinfo = array(
+ 'width' => $width,
+ 'height' => $height,
+ 'type' => image_type_to_extension($type, false),
+ 'attr' => $attr
+ );
+ $fun = "imagecreatefrom" . $this->imageinfo['type'];
+ $this->image = $fun($this->src);
+ $this->_thumpImage();
+ }
+
+ /**
+ * 内部:操作图片
+ */
+ private function _thumpImage()
+ {
+ $new_width = $this->imageinfo['width'] * $this->percent;
+ $new_height = $this->imageinfo['height'] * $this->percent;
+ $image_thump = imagecreatetruecolor($new_width, $new_height);
+ /**
+ * 保留图片透明通道
+ * 简单图床 EasyImage 2.0 2021-5-9 21:48:59
+ * 参考: https://www.imooc.com/wenda/detail/581249
+ */
+ imagealphablending($image_thump, false);
+ imagesavealpha($image_thump, true);
+
+ //将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
+ imagecopyresampled($image_thump, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->imageinfo['width'], $this->imageinfo['height']);
+
+ imagedestroy($this->image);
+ $this->image = $image_thump;
+ }
+
+ /**
+ * 输出图片:保存图片则用saveImage()
+ */
+ private function _showImage()
+ {
+ header('Content-Type: image/' . $this->imageinfo['type']);
+ $funcs = "image" . $this->imageinfo['type'];
+ $funcs($this->image);
+ }
+
+ /**
+ * 保存图片到硬盘:
+ * @param string $dstImgName 1、可指定字符串不带后缀的名称,使用源图扩展名 。2、直接指定目标图片名带扩展名。
+ */
+ private function _saveImage($dstImgName)
+ {
+ if (empty($dstImgName)) return false;
+ $allowImgs = array('.jpg', '.jpeg', '.png', '.bmp', '.wbmp', '.gif'); //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
+ $dstExt = strrchr($dstImgName, ".");
+ $sourseExt = strrchr($this->src, ".");
+ if (!empty($dstExt)) $dstExt = strtolower($dstExt);
+ if (!empty($sourseExt)) $sourseExt = strtolower($sourseExt);
+
+ //有指定目标名扩展名
+ if (!empty($dstExt) && in_array($dstExt, $allowImgs)) {
+ $dstName = $dstImgName;
+ } elseif (!empty($sourseExt) && in_array($sourseExt, $allowImgs)) {
+ $dstName = $dstImgName . $sourseExt;
+ } else {
+ $dstName = $dstImgName . $this->imageinfo['type'];
+ }
+ $funcs = "image" . $this->imageinfo['type'];
+ $funcs($this->image, $dstName);
+ }
+
+ /**
+ * 销毁图片
+ */
+ public function __destruct()
+ {
+ imagedestroy($this->image);
+ }
+}
diff --git a/libs/compress/TinyImg/TinyImg.php b/libs/compress/TinyImg/TinyImg.php
index 01b64b6..53b9d8f 100644
--- a/libs/compress/TinyImg/TinyImg.php
+++ b/libs/compress/TinyImg/TinyImg.php
@@ -1,76 +1,76 @@
-getFiles($inputFolder);
- if (empty($images)) {
- return false;
- }
- foreach ($images as $image) {
- $input = $inputFolder . "\\" . $image;
- $output = $outputFolder . "\\" . $image;
- print($input . " => 源文件
");
- print($output . " => 成功文件
");
- $this->compressImg($key, $input, $output);
- }
- return true;
- }
- /*Compress one image $input and save as $output*/
- public function compressImg($key, $input, $output)
- {
- $url = "https://api.tinify.com/shrink";
- $options = array(
- "http" => array(
- "method" => "POST",
- "header" => array(
- "Content-type: image/png",
- "Authorization: Basic " . base64_encode("api:$key")
- ),
- "content" => file_get_contents($input)
- ),
- "ssl" => array(
- /* Uncomment below if you have trouble validating our SSL certificate.
- Download cacert.pem from: http://curl.haxx.se/ca/cacert.pem */
- "cafile" => __DIR__ . "/cacert.pem",
- "verify_peer" => true
- )
- );
-
- $result = fopen($url, "r", false, stream_context_create($options));
- if ($result) {
- /* Compression was successful, retrieve output from Location header. */
- foreach ($http_response_header as $header) {
- if (strtolower(substr($header, 0, 10)) === "location: ") {
- file_put_contents($output, fopen(substr($header, 10), "rb", false));
- }
- }
- } else {
- /* Something went wrong! */
- print("Compression failed
");
- }
- }
- //get all files' fullname in $filedir
- public function getFiles($filedir)
- {
- $files = [];
- $dir = @dir($filedir);
- while (($file = $dir->read()) != false) {
- if ($file != "." and $file != "..") {
- $files[] = $file;
- }
- }
- $dir->close();
- return $files;
- }
-}
+getFiles($inputFolder);
+ if (empty($images)) {
+ return false;
+ }
+ foreach ($images as $image) {
+ $input = $inputFolder . $image;
+ $output = $outputFolder . $image;
+ print($input . " => 源文件
");
+ print($output . " => 成功文件
");
+ $this->compressImg($key, $input, $output);
+ }
+ return true;
+ }
+ /*Compress one image $input and save as $output*/
+ public function compressImg($key, $input, $output)
+ {
+ $url = "https://api.tinify.com/shrink";
+ $options = array(
+ "http" => array(
+ "method" => "POST",
+ "header" => array(
+ "Content-type: image/png",
+ "Authorization: Basic " . base64_encode("api:$key")
+ ),
+ "content" => file_get_contents($input)
+ ),
+ "ssl" => array(
+ /* Uncomment below if you have trouble validating our SSL certificate.
+ Download cacert.pem from: http://curl.haxx.se/ca/cacert.pem */
+ "cafile" => __DIR__ . "/cacert.pem",
+ "verify_peer" => true
+ )
+ );
+
+ $result = fopen($url, "r", false, stream_context_create($options));
+ if ($result) {
+ /* Compression was successful, retrieve output from Location header. */
+ foreach ($http_response_header as $header) {
+ if (strtolower(substr($header, 0, 10)) === "location: ") {
+ file_put_contents($output, fopen(substr($header, 10), "rb", false));
+ }
+ }
+ } else {
+ /* Something went wrong! */
+ print("Compression failed
");
+ }
+ }
+ //get all files' fullname in $filedir
+ public function getFiles($filedir)
+ {
+ $files = [];
+ $dir = @dir($filedir);
+ while (($file = $dir->read()) != false) {
+ if ($file != "." and $file != "..") {
+ $files[] = $file;
+ }
+ }
+ $dir->close();
+ return $files;
+ }
+}
diff --git a/libs/compress/TinyImg/cacert.pem b/libs/compress/TinyImg/cacert.pem
index cb5a702..fdb454d 100644
--- a/libs/compress/TinyImg/cacert.pem
+++ b/libs/compress/TinyImg/cacert.pem
@@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Tue Apr 13 03:12:04 2021 GMT
+## Certificate data from Mozilla as of: Mon Jul 5 21:35:54 2021 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,7 +14,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.28.
-## SHA256: f377673fa3c22ba2188a4cea041c7b8c99a4817ffde6821e98325ce89324e5aa
+## SHA256: c8f6733d1ff4e6a4769c182971a1234f95ae079247a9c439a13423fe8ba5c24f
##
@@ -156,38 +156,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
-----END CERTIFICATE-----
-QuoVadis Root CA
-================
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
-ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
-MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
-cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
-EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
-J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
-F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
-YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
-AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
-PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
-ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
-MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
-YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
-Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
-BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
-FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
-tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
-fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
-LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
-gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
-5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
-5nrQNiOKSnQ2+Q==
------END CERTIFICATE-----
-
QuoVadis Root CA 2
==================
-----BEGIN CERTIFICATE-----
@@ -275,26 +243,6 @@ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
FL39vmwLAw==
-----END CERTIFICATE-----
-Sonera Class 2 Root CA
-======================
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
-U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
-NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
-IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
-/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
-dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
-f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
-tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
-nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
-XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
-0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
-cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
-Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
-EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
-llpwrN9M
------END CERTIFICATE-----
-
XRamp Global CA Root
====================
-----BEGIN CERTIFICATE-----
@@ -893,82 +841,6 @@ Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
-----END CERTIFICATE-----
-Chambers of Commerce Root - 2008
-================================
------BEGIN CERTIFICATE-----
-MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
-Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
-ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
-EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
-cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
-XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
-h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
-ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
-NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
-D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
-lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
-0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
-ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
-EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
-G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
-BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
-bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
-bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
-CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
-AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
-wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
-3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
-RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
-M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
-YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
-9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
-zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
-nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
-OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
------END CERTIFICATE-----
-
-Global Chambersign Root - 2008
-==============================
------BEGIN CERTIFICATE-----
-MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
-MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
-bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
-QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
-NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
-Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
-QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
-aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
-VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
-XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
-ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
-/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
-TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
-H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
-Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
-HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
-wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
-AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
-BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
-BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
-aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
-aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
-1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
-dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
-/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
-ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
-dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
-9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
-foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
-qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
-P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
-c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
-09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
------END CERTIFICATE-----
-
Go Daddy Root Certificate Authority - G2
========================================
-----BEGIN CERTIFICATE-----
@@ -1270,27 +1142,6 @@ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
-----END CERTIFICATE-----
-Trustis FPS Root CA
-===================
------BEGIN CERTIFICATE-----
-MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
-EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
-IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
-BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
-RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
-H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
-cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
-o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
-AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
-BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
-GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
-yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
-8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
-l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
-iB6XzCGcKQENZetX2fNXlrtIzYE=
------END CERTIFICATE-----
-
Buypass Class 2 Root CA
=======================
-----BEGIN CERTIFICATE-----
@@ -3212,3 +3063,112 @@ gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk
vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
CAezNIm8BZ/3Hobui3A=
-----END CERTIFICATE-----
+
+GLOBALTRUST 2020
+================
+-----BEGIN CERTIFICATE-----
+MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx
+IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT
+VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh
+BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy
+MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi
+D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO
+VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM
+CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm
+fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA
+A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR
+JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG
+DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU
+clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ
+mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud
+IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA
+VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw
+4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9
+iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS
+8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2
+HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS
+vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918
+oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF
+YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl
+gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
+-----END CERTIFICATE-----
+
+ANF Secure Server Root CA
+=========================
+-----BEGIN CERTIFICATE-----
+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
+-----END CERTIFICATE-----
+
+Certum EC-384 CA
+================
+-----BEGIN CERTIFICATE-----
+MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ
+TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
+dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2
+MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh
+dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
+GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq
+vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn
+iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo
+ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0
+QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
+-----END CERTIFICATE-----
+
+Certum Trusted Root CA
+======================
+-----BEGIN CERTIFICATE-----
+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
+-----END CERTIFICATE-----
diff --git a/libs/compress/function.compress.php b/libs/compress/function.compress.php
index b9d193c..b16da49 100644
--- a/libs/compress/function.compress.php
+++ b/libs/compress/function.compress.php
@@ -1,54 +1,54 @@
-compressImg($boxImg);
- echo '' . $boxImg . '
';
- // 释放
- ob_flush();
- }
- }
- }
-
- if ($type == 'TinyImg') {
- if (empty($Api_Key['TinyImag'])) {
- exit('请先申请TinyImag key并保存再试!');
- }
- $folder = '..' . $config['path'] . $source;
- $tinyImg = new TinyImg();
- $key = $Api_Key['TinyImag'];
- $input = $folder; //这个文件夹下的文件会被压缩
- $output = $folder; //压缩的结果会被保存到这个文件夹中
- $tinyImg->compressImgsFolder($key, $input, $output);
- }
-}
-
-/* Test
-$floder = 'D:/phpStudy/WWW/i/2021/05/09/';
-compress($floder, 'TinyImg');
-echo 666;
-*/
+compressImg($boxImg);
+ echo '' . $boxImg . '
';
+ // 释放
+ ob_flush();
+ }
+ }
+ }
+
+ if ($type == 'TinyImg') {
+ if (empty($Api_Key['TinyImag'])) {
+ exit('请先申请TinyImag key并保存再试!');
+ }
+ $folder = '..' . $config['path'] . $source;
+ $tinyImg = new TinyImg();
+ $key = $Api_Key['TinyImag'];
+ $input = $folder; //这个文件夹下的文件会被压缩
+ $output = $folder; //压缩的结果会被保存到这个文件夹中
+ $tinyImg->compressImgsFolder($key, $input, $output);
+ }
+}
+
+/* Test
+$floder = 'D:/phpStudy/WWW/i/2021/05/09/';
+compress($floder, 'TinyImg');
+echo 666;
+*/
\ No newline at end of file
diff --git a/libs/compressing.php b/libs/compressing.php
index 7a1ab6a..4d2ab3b 100644
--- a/libs/compressing.php
+++ b/libs/compressing.php
@@ -1,59 +1,59 @@
- new $.zui.Messager("没有这个文件夹!", {type: "danger" // 定义颜色主题
- }).show();');
- }
-
- // 压缩前
- $sizeBefor = getDirectorySize($folder);
-
- compress($folder, $type, $source);
-
- echo '
- ';
-}
-// 压缩后
-$sizeAfter = getDirectorySize($folder);
-
-echo '
-压缩完毕
-压缩前:' . getDistUsed($sizeBefor) . ' 压缩后:' . getDistUsed($sizeAfter) . '
-
-无论使用哪种压缩均为不可逆操作,并且非常占用硬件资源。
-
-如机器配置过低可能会导致CPU、内存飙升!
-
-Imgcompress 自带压缩为轻微有损压缩图片 此压缩有可能使图片变大,特别是小图片!也有一定概率改变图片方向。
-
-Imgcompress 对自身机器要求高,如图片过多会导致脚本崩溃或者超时(已经预处理超时和脚本崩溃处理,但是有概率重现)!
-
-TinyImag 是 https://tinify.cn/ 提供的API,需要自行申请,对服务器要求较低,但是对网络要求高!如在国内可能导致非常慢而超时崩溃(已预处理,但是有概率重现)。
-
-获取TinyImag key https://tinify.cn/developers 并填入 /config/api_key.php 文件。
-
-';
-
-include 'footer.php';
+ new $.zui.Messager("没有这个文件夹!", {type: "danger" // 定义颜色主题
+ }).show();');
+ }
+
+ // 压缩前
+ $sizeBefor = getDirectorySize($folder);
+
+ compress($folder, $type, $source);
+
+ echo '
+ ';
+}
+// 压缩后
+$sizeAfter = getDirectorySize($folder);
+
+echo '
+压缩完毕
+压缩前:' . getDistUsed($sizeBefor) . ' 压缩后:' . getDistUsed($sizeAfter) . '
+
+无论使用哪种压缩均为不可逆操作,并且非常占用硬件资源。
+
+如机器配置过低可能会导致CPU、内存飙升!
+
+Imgcompress 自带压缩为轻微有损压缩图片 此压缩有可能使图片变大,特别是小图片!也有一定概率改变图片方向。
+
+Imgcompress 对自身机器要求高,如图片过多会导致脚本崩溃或者超时(已经预处理超时和脚本崩溃处理,但是有概率重现)!
+
+TinyImag 是 https://tinify.cn/ 提供的API,需要自行申请,对服务器要求较低,但是对网络要求高!如在国内可能导致非常慢而超时崩溃(已预处理,但是有概率重现)。
+
+获取TinyImag key https://tinify.cn/developers 并填入 /config/api_key.php 文件。
+
+';
+
+include 'footer.php';
diff --git a/libs/footer.php b/libs/footer.php
index 4abc107..378812e 100644
--- a/libs/footer.php
+++ b/libs/footer.php
@@ -1,101 +1,101 @@
-
-
-
-
-
-