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上传最大值:
-
-
-
-
-
-
- -
- - New Token - - -
-
-
- -
-
- - -
-
- -
-
-
-
-
-
-
-
- - -
- - -
-
-
-
- -
-
-
- - -
-
- -
-
- -
-
- - -
- -
-
-
- - - - - - - - '; - } - ?> - -
当前可用Token列表:
' . $value . '
-
-
-
-
- - -
- - -
-
-
- - - - - - - - new $.zui.Messager("删除成功!", {type: "success" // 定义颜色主题 + }).show();'; + header("refresh:1;"); // 1s后刷新当前页面 + } else { + echo ' + '; + header("refresh:1;"); // 1s后刷新当前页面 + } +} +?> + +
+
+
+
+

EasyImage2.0 快捷操作中心

+
+
此页面为常用快捷操作,目录保存以 年/月/日/ 递进,非必要请勿修改!否则会导致部分操作不可用。
+
当前软件环境信息:PHP版本:;PHP上传最大值:;POST上传最大值:
+
+
+
+
+
+
+ +
+ + New Token + + +
+
+
+ +
+
+ + +
+
+ +
+
+
+
+
+
+
+
+ + +
+ + +
+
+
+
+ +
+
+
+ + +
+
+ +
+
+ +
+
+ + +
+ +
+
+
+ + + + + + + + '; + } + ?> + +
当前可用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(''); -} - -?> -
-
-
-

测试Token:

-
-
- -
-
- -
- -
-
- - - - - - 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(''); +} + +?> +
+
+
+

测试Token:

+
+
+ +
+
+ +
+ +
+
+ + + + + -
- -
-
- - -
- -
- - '; -if (empty($_REQUEST)) { - echo ' - - '; -} elseif (isset($_GET['url'])) { - $img = $_GET['url']; - echo ' -
-
- 简单图床-EasyImage -
'; -} - -// 解密删除 -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
+ 简单图床-EasyImage +
'; +} + +// 解密删除 +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----- +MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG +EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0Ew +HhcNMTgwMzE2MTIxMDEzWhcNNDMwMzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMY +QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZn0EGze2jusDbCSzBfN8p +fktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/qp1x4EaTByIVcJdPTsuclzxFUl6s1wB52 +HO8AU5853BSlLCIls3Jy/I2z5T4IHhQqNwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2 +fJmItdUDmj0VDT06qKhF8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGt +g/BKEiJ3HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGamqi4 +NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi7VdNIuJGmj8PkTQk +fVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSFytKAQd8FqKPVhJBPC/PgP5sZ0jeJ +P/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0PqafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSY +njYJdmZm/Bo/6khUHL4wvYBQv3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHK +HRzQ+8S1h9E6Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 +vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQADggIBAEii1QAL +LtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4WxmB82M+w85bj/UvXgF2Ez8s +ALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvozMrnadyHncI013nR03e4qllY/p0m+jiGPp2K +h2RX5Rc64vmNueMzeMGQ2Ljdt4NR5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8 +CYyqOhNf6DR5UMEQGfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA +4kZf5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq0Uc9Nneo +WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj +6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTMqJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmT +OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck +bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb +-----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 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/libs/function.php b/libs/function.php index 8f3ddec..ec12730 100644 --- a/libs/function.php +++ b/libs/function.php @@ -1,505 +1,505 @@ - new $.zui.Messager("登录成功", {type: "success" // 定义颜色主题 - }).show();'; - header("refresh:1;"); // 1s后刷新当前页面 - } else { // 密码错误 - echo ' - '; - //exit(include __DIR__ . '/login.php'); - exit(header("refresh:1;")); - } - } elseif (isset($_COOKIE['admin'])) { // cookie正确 - if ($_COOKIE['admin'] == $md5Pwd) { - } else { // cookie错误 - echo ' - '; - //header('loction:login.php'); - exit(include __DIR__ . '/login.php'); - } - } else { // 无登录无cookie - echo ' - '; - //header('loction:login.php'); - exit(include __DIR__ . '/login.php'); - } -} - -// 仅允许登录后上传 -function mustLogin() -{ - global $config; - if ($config['mustLogin']) { - checkLogin(); - } -} - -// 检查配置文件中目录是否存在是否可写并创建相应目录 -function config_path($path = null) -{ - global $config; - // php5.6 兼容写法: - $path = isset($path) ? $path : date('Y/m/d/'); - // php7.0 $path = $path ?? date('Y/m/d/'); - $img_path = $config['path'] . $path; - - if (!is_dir($img_path)) { - @mkdir($img_path, 0755, true); - } - - if (!is_writable($img_path)) { - @chmod($img_path, 0755); - } - - return $img_path; -} - -// 图片命名规则 -function imgName() -{ - return base_convert(date('His') . mt_rand(1024, 10240), 10, 36); -} - -// 设置广告 -function showAD($where) -{ - global $config; - switch ($where) { - case 'top': - if ($config['ad_top']) { - include(__DIR__ . '/../public/ad/top.html'); - } - break; - case 'bot': - if ($config['ad_bot']) { - include(__DIR__ . '/../public/ad/bottom.html'); - } - break; - default: - echo '广告函数出错'; - break; - } -} - -// 静态文件CDN -function static_cdn() -{ - global $config; - if ($config['static_cdn']) { - // 开启CDN - return ' - - - - - - - - - - '; - } else { - // 本地文件 - return ' - - - - - - - - - - '; - } -} - -// 开启tinyfilemanager图片管理 -function tinyfilemanager() -{ - global $config; - if (!$config['tinyfilemanager']) { - header('Location: ' . $_SERVER["HTTP_REFERER"] . '?manager-closed'); - exit; - } -} -/* -// 获取允许上传的扩展名 -function getExtensions() -{ - global $config; - $mime = ''; - for ($i = 0; $i < count($config['extensions']); $i++) { - $mime .= $config['extensions'][$i] . ','; - } - return rtrim($mime, ','); -} -*/ -// 获取目录大小 如果目录文件较多将很费时 -function getDirectorySize($path) -{ - $bytestotal = 0; - $path = realpath($path); - if ($path !== false && $path != '' && file_exists($path)) { - foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $object) { - $bytestotal += $object->getSize(); - } - } - return $bytestotal; -} - -/** - * 获取指定文件夹文件数量 - * @param $url 传入一个路径如:/apps/web - * @return int 返回文件数量 - */ -function getFileNumber($url) -{ - $num = 0; - $arr = glob($url); - foreach ($arr as $v) { - if (is_file($v)) { - $num++; - } else { - $num += getFileNumber($v . "/*"); - } - } - return $num; -} - -/* - * 图片展示页面 - * getDir()取文件夹列表,getFile()取对应文件夹下面的文件列表,二者的区别在于判断有没有“.”后缀的文件,其他都一样 - * 获取文件目录列表,该方法返回数组 - * 调用方法getDir("./dir")…… - */ -function getDir($dir) -{ - $dirArray[] = NULL; - if (false != ($handle = opendir($dir))) { - $i = 0; - while (false !== ($file = readdir($handle))) { - //去掉"“.”、“..”以及带“.xxx”后缀的文件 - if ($file != "." && $file != ".." && !strpos($file, ".")) { - $dirArray[$i] = $file; - $i++; - } - } - //关闭句柄 - closedir($handle); - } - return $dirArray; -} -// 获取文件列表 -function getFile($dir) -{ - $fileArray[] = NULL; - if (is_dir($dir)) { - if (false != ($handle = opendir($dir))) { - $i = 0; - while (false !== ($file = readdir($handle))) { - //去掉"“.”、“..”以及带“.xxx”后缀的文件 - if ($file != "." && $file != ".." && strpos($file, ".")) { - $fileArray[$i] = $file; - if ($i == 100) { - break; - } - $i++; - } - } - //关闭句柄 - closedir($handle); - } - } - return $fileArray; -} - -/* 递归函数实现遍历指定文件下的目录与文件数量 - * 用来统计一个目录下的文件和目录的个数 - * echo "目录数为:{$dirn}
"; - * echo "文件数为:{$filen}
"; - */ -$dirn = 0; //目录数 -$filen = 0; //文件数 - -function getdirnum($file) -{ - global $dirn; - global $filen; - $dir = opendir($file); - while ($filename = readdir($dir)) { - if ($filename != "." && $filename != "..") { - $filename = $file . "/" . $filename; - if (is_dir($filename)) { - $dirn++; - getdirnum($filename); - //递归,就可以查看所有子目录 - } else { - $filen++; - } - } - } - closedir($dir); -} - -/* 把文件或目录的大小转化为容易读的方式 - * disk_free_space - 磁盘可用空间(比如填写D盘某文件夹,则会现在D盘剩余空间) - * disk_total_space — 磁盘总空间(比如填写D盘某文件夹,则会现在D盘总空间) - */ -function getDistUsed($number) -{ - $dw = ''; // 指定文件或目录统计的单位方式 - if ($number > pow(2, 30)) { - $dw = "GB"; - $number = round($number / pow(2, 30), 2); - } else if ($number > pow(2, 20)) { - $dw = "MB"; - $number = round($number / pow(2, 20), 2); - } else if ($number > pow(2, 10)) { - $dw = "KB"; - $number = round($number / pow(2, 10), 2); - } else { - $dw = "bytes"; - } - return $number . $dw; -} - -// 根据url填写active -function getActive($url) -{ - $arr = $_SERVER['PHP_SELF']; - if (strpos($arr, $url)) { - return 'active'; - } elseif (strpos($arr, $url)) { - return 'active'; - } else { - return ''; - } -} - -/** - * 加密/解密图片路径 - * @param string $data 要加密的内容 - * @param int $mode =1或0 1解密 0加密 - * - */ -function urlHash($data, $mode) -{ - global $config; - $key = $config['password']; - $iv = 'sciCuBC7orQtDhTO'; - if ($mode) { - $decode = openssl_decrypt(base64_decode($data), "AES-128-CBC", $key, 0, $iv); - return $decode; - } else { - $encode = base64_encode(openssl_encrypt($data, "AES-128-CBC", $key, 0, $iv)); - return $encode; - } -} - -// 删除指定文件 -function getDel($url, $type) -{ - if ($type == 'url') { - // url本地化 - $url = htmlspecialchars(parse_url($url)['path']); // 过滤html 获取url path - $url = urldecode(trim($url)); - $url = $_SERVER['DOCUMENT_ROOT'] . $url; - } - if ($type == 'hash') { - // url本地化 - $url = htmlspecialchars(parse_url($url)['path']); // 过滤html 获取url path - $url = urldecode(trim($url)); - $url = APP_ROOT . $url; - } - - - // 文件是否存在 - if (is_file($url)) { - // 执行删除 - if (@unlink($url)) { - echo ' - - '; - } else { - echo ' - - '; - } - } else { - echo ' - - '; - } - // 清除查询 - clearstatcache(); -} - -// 获取登录状态 -function is_online() -{ - global $config; - $md5Pwd = md5($config['password']); - if (empty($_COOKIE['admin']) || $_COOKIE['admin'] != $md5Pwd) { - echo false; - } else { - return true; - } -} - -/** - * 检查PHP缺少简单图床必备的扩展 - * 需检测的扩展:'fileinfo', 'iconv', 'gd', 'mbstring', 'openssl','zip', - * zip 扩展不是必须的,但会影响tinyfilemanager文件压缩(本次不检测)。 - * - * 检测是否更改默认域名 - * - * 检测是否修改默认密码 - */ -function checkEnv($mode) -{ - global $config; - - if ($mode) { - // 扩展检测 - $expand = array('fileinfo', 'iconv', 'gd', 'mbstring', 'openssl',); - foreach ($expand as $val) { - if (!extension_loaded($val)) { - echo ' - - '; - } - } - - // 检测是否更改默认域名 - $url = preg_replace('#^(http(s?))?(://)#', '', 'http://192.168.1.15'); - if (strstr($url, $_SERVER['HTTP_HOST'])) { - echo ' - - '; - } - // 检测是否修改默认密码 - if ($config['password'] === 'admin@123') { - echo ' - - '; - } - } -} - -// 前端改变图片长宽 -function imgRatio() -{ - global $config; - if ($config['imgRatio']) { - $image_x = $config['image_x']; - $image_y = $config['image_y']; - echo ' - resize:{ - width: ' . $image_x . ', - height: ' . $image_y . ', - preserve_headers: false, // 是否保留图片的元数据 - }, - '; - } else { - return null; - } -} - -/** - * 定时获取GitHub 最新版本 - */ - -function getVersion() -{ - global $config; - - if ($config['checkEnv']) { - require_once APP_ROOT . '/libs/class.version.php'; - // 获取版本地址 - $url = "https://api.github.com/repositories/188228357/releases/latest"; - $getVersion = new getVerson($url); - - $now = date('dH'); // 当前日期时间 - $get_ver_day = array('1006', '2501'); // 检测日期的时间 - - foreach ($get_ver_day as $day) { - if (empty($getVersion->readJson())) { // 不存在就下载 - $getVersion->downJson(); - } else if ($day == $now) { // 是否在需要更新的日期 - $getVersion->downJson(); - } elseif ($config['version'] == $getVersion->readJson()) { // 版本相同不提示 - return null; - } else { // 返回版本 - return ':' . $getVersion->readJson(); - } - } - } else { - return null; - } -} - -// 删除非空目录 -function deldir($dir) -{ - if (file_exists($dir)) { - $files = scandir($dir); - foreach ($files as $file) { - if ($file != '.' && $file != '..') { - $path = $dir . '/' . $file; - if (is_dir($path)) { - deldir($path); - } else { - unlink($path); - } - } - } - rmdir($dir); - return true; - } else { - return false; - } -} + new $.zui.Messager("登录成功", {type: "success" // 定义颜色主题 + }).show();'; + header("refresh:1;"); // 1s后刷新当前页面 + } else { // 密码错误 + echo ' + '; + //exit(include __DIR__ . '/login.php'); + exit(header("refresh:1;")); + } + } elseif (isset($_COOKIE['admin'])) { // cookie正确 + if ($_COOKIE['admin'] == $md5Pwd) { + } else { // cookie错误 + echo ' + '; + //header('loction:login.php'); + exit(include __DIR__ . '/login.php'); + } + } else { // 无登录无cookie + echo ' + '; + //header('loction:login.php'); + exit(include __DIR__ . '/login.php'); + } +} + +// 仅允许登录后上传 +function mustLogin() +{ + global $config; + if ($config['mustLogin']) { + checkLogin(); + } +} + +// 检查配置文件中目录是否存在是否可写并创建相应目录 +function config_path($path = null) +{ + global $config; + // php5.6 兼容写法: + $path = isset($path) ? $path : date('Y/m/d/'); + // php7.0 $path = $path ?? date('Y/m/d/'); + $img_path = $config['path'] . $path; + + if (!is_dir($img_path)) { + @mkdir($img_path, 0755, true); + } + + if (!is_writable($img_path)) { + @chmod($img_path, 0755); + } + + return $img_path; +} + +// 图片命名规则 +function imgName() +{ + return base_convert(date('His') . mt_rand(1024, 10240), 10, 36); +} + +// 设置广告 +function showAD($where) +{ + global $config; + switch ($where) { + case 'top': + if ($config['ad_top']) { + include(__DIR__ . '/../public/ad/top.html'); + } + break; + case 'bot': + if ($config['ad_bot']) { + include(__DIR__ . '/../public/ad/bottom.html'); + } + break; + default: + echo '广告函数出错'; + break; + } +} + +// 静态文件CDN +function static_cdn() +{ + global $config; + if ($config['static_cdn']) { + // 开启CDN + return ' + + + + + + + + + + '; + } else { + // 本地文件 + return ' + + + + + + + + + + '; + } +} + +// 开启tinyfilemanager图片管理 +function tinyfilemanager() +{ + global $config; + if (!$config['tinyfilemanager']) { + header('Location: ' . $_SERVER["HTTP_REFERER"] . '?manager-closed'); + exit; + } +} +/* +// 获取允许上传的扩展名 +function getExtensions() +{ + global $config; + $mime = ''; + for ($i = 0; $i < count($config['extensions']); $i++) { + $mime .= $config['extensions'][$i] . ','; + } + return rtrim($mime, ','); +} +*/ +// 获取目录大小 如果目录文件较多将很费时 +function getDirectorySize($path) +{ + $bytestotal = 0; + $path = realpath($path); + if ($path !== false && $path != '' && file_exists($path)) { + foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $object) { + $bytestotal += $object->getSize(); + } + } + return $bytestotal; +} + +/** + * 获取指定文件夹文件数量 + * @param $url 传入一个路径如:/apps/web + * @return int 返回文件数量 + */ +function getFileNumber($url) +{ + $num = 0; + $arr = glob($url); + foreach ($arr as $v) { + if (is_file($v)) { + $num++; + } else { + $num += getFileNumber($v . "/*"); + } + } + return $num; +} + +/* + * 图片展示页面 + * getDir()取文件夹列表,getFile()取对应文件夹下面的文件列表,二者的区别在于判断有没有“.”后缀的文件,其他都一样 + * 获取文件目录列表,该方法返回数组 + * 调用方法getDir("./dir")…… + */ +function getDir($dir) +{ + $dirArray[] = NULL; + if (false != ($handle = opendir($dir))) { + $i = 0; + while (false !== ($file = readdir($handle))) { + //去掉"“.”、“..”以及带“.xxx”后缀的文件 + if ($file != "." && $file != ".." && !strpos($file, ".")) { + $dirArray[$i] = $file; + $i++; + } + } + //关闭句柄 + closedir($handle); + } + return $dirArray; +} +// 获取文件列表 +function getFile($dir) +{ + $fileArray[] = NULL; + if (is_dir($dir)) { + if (false != ($handle = opendir($dir))) { + $i = 0; + while (false !== ($file = readdir($handle))) { + //去掉"“.”、“..”以及带“.xxx”后缀的文件 + if ($file != "." && $file != ".." && strpos($file, ".")) { + $fileArray[$i] = $file; + if ($i == 100) { + break; + } + $i++; + } + } + //关闭句柄 + closedir($handle); + } + } + return $fileArray; +} + +/* 递归函数实现遍历指定文件下的目录与文件数量 + * 用来统计一个目录下的文件和目录的个数 + * echo "目录数为:{$dirn}
"; + * echo "文件数为:{$filen}
"; + */ +$dirn = 0; //目录数 +$filen = 0; //文件数 + +function getdirnum($file) +{ + global $dirn; + global $filen; + $dir = opendir($file); + while ($filename = readdir($dir)) { + if ($filename != "." && $filename != "..") { + $filename = $file . "/" . $filename; + if (is_dir($filename)) { + $dirn++; + getdirnum($filename); + //递归,就可以查看所有子目录 + } else { + $filen++; + } + } + } + closedir($dir); +} + +/* 把文件或目录的大小转化为容易读的方式 + * disk_free_space - 磁盘可用空间(比如填写D盘某文件夹,则会现在D盘剩余空间) + * disk_total_space — 磁盘总空间(比如填写D盘某文件夹,则会现在D盘总空间) + */ +function getDistUsed($number) +{ + $dw = ''; // 指定文件或目录统计的单位方式 + if ($number > pow(2, 30)) { + $dw = "GB"; + $number = round($number / pow(2, 30), 2); + } else if ($number > pow(2, 20)) { + $dw = "MB"; + $number = round($number / pow(2, 20), 2); + } else if ($number > pow(2, 10)) { + $dw = "KB"; + $number = round($number / pow(2, 10), 2); + } else { + $dw = "bytes"; + } + return $number . $dw; +} + +// 根据url填写active +function getActive($url) +{ + $arr = $_SERVER['PHP_SELF']; + if (strpos($arr, $url)) { + return 'active'; + } elseif (strpos($arr, $url)) { + return 'active'; + } else { + return ''; + } +} + +/** + * 加密/解密图片路径 + * @param string $data 要加密的内容 + * @param int $mode =1或0 1解密 0加密 + * + */ +function urlHash($data, $mode) +{ + global $config; + $key = $config['password']; + $iv = 'sciCuBC7orQtDhTO'; + if ($mode) { + $decode = openssl_decrypt(base64_decode($data), "AES-128-CBC", $key, 0, $iv); + return $decode; + } else { + $encode = base64_encode(openssl_encrypt($data, "AES-128-CBC", $key, 0, $iv)); + return $encode; + } +} + +// 删除指定文件 +function getDel($url, $type) +{ + if ($type == 'url') { + // url本地化 + $url = htmlspecialchars(parse_url($url)['path']); // 过滤html 获取url path + $url = urldecode(trim($url)); + $url = $_SERVER['DOCUMENT_ROOT'] . $url; + } + if ($type == 'hash') { + // url本地化 + $url = htmlspecialchars(parse_url($url)['path']); // 过滤html 获取url path + $url = urldecode(trim($url)); + $url = APP_ROOT . $url; + } + + + // 文件是否存在 + if (is_file($url)) { + // 执行删除 + if (@unlink($url)) { + echo ' + + '; + } else { + echo ' + + '; + } + } else { + echo ' + + '; + } + // 清除查询 + clearstatcache(); +} + +// 获取登录状态 +function is_online() +{ + global $config; + $md5Pwd = md5($config['password']); + if (empty($_COOKIE['admin']) || $_COOKIE['admin'] != $md5Pwd) { + echo false; + } else { + return true; + } +} + +/** + * 检查PHP缺少简单图床必备的扩展 + * 需检测的扩展:'fileinfo', 'iconv', 'gd', 'mbstring', 'openssl','zip', + * zip 扩展不是必须的,但会影响tinyfilemanager文件压缩(本次不检测)。 + * + * 检测是否更改默认域名 + * + * 检测是否修改默认密码 + */ +function checkEnv($mode) +{ + global $config; + + if ($mode) { + // 扩展检测 + $expand = array('fileinfo', 'iconv', 'gd', 'mbstring', 'openssl',); + foreach ($expand as $val) { + if (!extension_loaded($val)) { + echo ' + + '; + } + } + + // 检测是否更改默认域名 + $url = preg_replace('#^(http(s?))?(://)#', '', 'http://192.168.1.15'); + if (strstr($url, $_SERVER['HTTP_HOST'])) { + echo ' + + '; + } + // 检测是否修改默认密码 + if ($config['password'] === 'admin@123') { + echo ' + + '; + } + } +} + +// 前端改变图片长宽 +function imgRatio() +{ + global $config; + if ($config['imgRatio']) { + $image_x = $config['image_x']; + $image_y = $config['image_y']; + echo ' + resize:{ + width: ' . $image_x . ', + height: ' . $image_y . ', + preserve_headers: false, // 是否保留图片的元数据 + }, + '; + } else { + return null; + } +} + +/** + * 定时获取GitHub 最新版本 + */ + +function getVersion() +{ + global $config; + + if ($config['checkEnv']) { + require_once APP_ROOT . '/libs/class.version.php'; + // 获取版本地址 + $url = "https://api.github.com/repositories/188228357/releases/latest"; + $getVersion = new getVerson($url); + + $now = date('dH'); // 当前日期时间 + $get_ver_day = array('1006', '2501'); // 检测日期的时间 + + foreach ($get_ver_day as $day) { + if (empty($getVersion->readJson())) { // 不存在就下载 + $getVersion->downJson(); + } else if ($day == $now) { // 是否在需要更新的日期 + $getVersion->downJson(); + } elseif ($config['version'] == $getVersion->readJson()) { // 版本相同不提示 + return null; + } else { // 返回版本 + return ':' . $getVersion->readJson(); + } + } + } else { + return null; + } +} + +// 删除非空目录 +function deldir($dir) +{ + if (file_exists($dir)) { + $files = scandir($dir); + foreach ($files as $file) { + if ($file != '.' && $file != '..') { + $path = $dir . '/' . $file; + if (is_dir($path)) { + deldir($path); + } else { + unlink($path); + } + } + } + rmdir($dir); + return true; + } else { + return false; + } +} diff --git a/libs/header.php b/libs/header.php index 8924383..c7bf6b2 100644 --- a/libs/header.php +++ b/libs/header.php @@ -1,53 +1,54 @@ - - - - - - - <?php echo $config['title']; ?> - - - - - - - - - - - - -
- -
+ + + + + + + <?php echo $config['title']; ?> + + + + + + + + + + + + +
+ +
\ No newline at end of file diff --git a/libs/list.php b/libs/list.php index 5f73f5c..765b8c4 100644 --- a/libs/list.php +++ b/libs/list.php @@ -1,9 +1,7 @@ 管理员关闭了预览哦~~

'; + echo '
管理员关闭了预览哦~~
'; } else { $path = $_GET['date'] ?? date('Y/m/d/'); @@ -30,7 +28,7 @@ if (!$config['showSwitch'] and !is_online()) { } } } else { - echo '

今天还没有上传的图片哟~~
快来上传第一张吧~!

'; + echo '
今天还没有上传的图片哟~~
快来上传第一张吧~!
'; } } @@ -48,32 +46,6 @@ $allUploud = getFileNumber(APP_ROOT . $config['path'] . $allUploud); 'num' => getFileNumber(APP_ROOT . config_path($path)), ); ?> - - - - -
-
- 今日上传: - 昨日上传: - 当前日期共上传: - 存储占用: -
-
-
-
- - -
- -
-
-
- - + + + +
+
+ 今日: + 昨日: + 当前上传: + 占用: +
+
+
+
+ + +
+ +
+
+
+ + - - - +
+
+
+
+
+ +
+ +
+ +
+
+
+ + + + - new $.zui.Messager("退出成功", {type: "success" // 定义颜色主题 - }).show(); - // 延时2s跳转 - window.setTimeout("window.location=\'../index.php\'",2000); - - '; -} else { - echo ' - - '; -} - -require_once 'footer.php'; + + new $.zui.Messager("退出成功", {type: "success" // 定义颜色主题 + }).show(); + // 延时2s跳转 + window.setTimeout("window.location=\'../index.php\'",2000); + + '; +} else { + echo ' + + '; +} + +require_once 'footer.php'; diff --git a/public/ad/top.html b/public/ad/top.html index b361a1a..5521eb3 100644 --- a/public/ad/top.html +++ b/public/ad/top.html @@ -1,4 +1,4 @@ - -