pull/18/head 2.4.7
icret 2022-01-27 17:25:46 +08:00
parent 36251d5230
commit 851835e330
44 changed files with 1821 additions and 2448 deletions

2
.github/FUNDING.yml vendored
View File

@ -1 +1 @@
custom: ['https://img.545141.com/sponsor/index.html']
custom: ['https://png.cm/sponsor/index.html']

118
README.md
View File

@ -1,11 +1,11 @@
## EasyImage 简单图床 2.0
> 始于2018年7月支持多文件上传,简单无数据库,返回图片url,markdown,bbscode,html的一款图床程序
演示地址:[https://img.545141.com](https://img.545141.com)
演示地址:[https://png.cm/](https://png.cm/)
之前一直用的图床程序是:[PHP多图长传程序2.4.3](https://www.jb51.net/codes/40544.html)
由于版本过老并且使用falsh上传在当前html5流行大势所趋下遂利用基础知识新写了一个以html5为默认上传并且支持flash,向下兼容至IE9。
>
[演示](https://img.545141.com)  
[演示](https://png.cm/)  
[Chrome 拓展](https://github.com/icret/EasyImage-Browser-Extension)  
[使用手册](https://www.kancloud.cn/easyimage/easyimage/)  
[问题反馈](https://support.qq.com/products/367633)  
@ -18,10 +18,9 @@
[![Code size](https://img.shields.io/github/languages/code-size/icret/EasyImages2.0?color=blueviolet)](https://github.com/icret/EasyImages2.0)
[![License](https://img.shields.io/badge/license-GPL_V2.0-yellowgreen.svg)](https://github.com/icret/EasyImages2.0/blob/master/LICENSE)
>本人善写bug 发现bug可提交 [Issues](https://github.com/icret/EasyImages2.0/issues) 追求稳定请下载 [稳定版](https://github.com/icret/EasyImages2.0/releases)
<hr />
>本人善写bug 发现bug可提交 [issues](https://github.com/icret/EasyImages2.0/issues) 追求稳定请下载 [稳定版](https://github.com/icret/EasyImages2.0/releases)
#### 功能支持:
## 功能支持:
- [x] 支持仅登录后上传
- [x] 支持设置图片质量
@ -36,32 +35,41 @@
- [x] 支持图片监黄
- [x] 支持自定义代码
- [x] 支持上传IP黑白名单
- [x] 支持创建仅上传用户
- [x] 更多支持请安装尝试···
#### 界面演示
## 使用注意:
![简单图床 - 上传界面](https://i1.100024.xyz/i/2020/12/31/ulmtho.png)
![简单图床 - 广场界面](https://i1.100024.xyz/i/2020/12/31/2.png)
![简单图床 - 后台界面](https://i1.100024.xyz/i/2020/12/31/3.png)
![简单图床 - 统计界面](https://i1.100024.xyz/i/2020/12/31/4.png)
#### 使用注意:
1. 请将所有文件赋予`0755`或`www`权限
1. 请将所有文件赋予`0755`和`www`权限
2. 对`PHP`不太熟悉的请不要将图床程序放置于二级目录
3. 请关闭防跨站或删除域名文件夹内的`user.ini`文件 如宝塔面板
4. 网站域名与图片域名必须填写,如果只有一个域名请填写成一样的
5. 第一使用会执行安装程序并生成`install.lock` 如果出错可以删除`install`目录再使用
5. 第一使用会执行安装程序并生成`install.lock` 不执行安装可以删除`install`目录
6. 第一次访问会检查环境并在`config`目录下生成`EasyImage.lock`
7. 可以使用谷歌浏览器的调试模式查看错误`F12->console`
8. 出现`undefined function imagecreatefromwebp()`是因为GD没安装webp
9. 出现`upload File size exceeds the maximum value` 调整`PHP`上传大小
10. 出现`Warning: is_dir(): open_basedir restriction in effect`解决方法同`3`
11. 出现`Fatal error: Allowed memory size......`主机内存或分配给PHP的内存不够 解决方法百度
12. 不出验证码: 权限问题见问题1/CDN缓存了/开防火墙了
#### 安全配置
## 安装
- Apache环境在上传目录添加配置文件`.htaccess` 使上传目录不可运行PHP程序默认存在)
- windows:
- 下载简单图床 [最新版](https://github.com/icret/EasyImages2.0/archive/refs/heads/master.zip) | [稳定版](https://github.com/icret/EasyImages2.0/releases) 上传至web目录
- Linux:
- `git clone https://github.com/icret/EasyImages2.0.git` 至web目录赋予www:www和0755权限
## 程序升级
- 备份`config`目录和`上传目录`
- 将新程序下载至网站目录解压覆盖,然后将备份的文件替换既完成升级
## 安全配置
- Apache环境在上传目录添加配置文件`.htaccess` 使上传目录不可运行PHP程序默认已经存在)
```Apache
<FilesMatch "\.(?i:php|php3|php4|php5)">
@ -69,24 +77,41 @@ Order allow,deny
Deny from all
</FilesMatch>
```
- Nginx环境限制上传目录禁止运行`PHP`程序:
- Nginx环境禁止多个目录运行`PHP`程序:
```Nginx
# 禁止运行php的目录 "i"是你的上传图片目录
location ~ /(i)/.*.(php|php5)?$ {
deny all;
# "i|public"是你要禁止的目录 放到listen段落之后才生效
location ~* ^/(i|public)/.*\.(php|php5)$
{
deny all;
}
```
- 或者参考:[https://www.545141.com/981.html](https://www.545141.com/981.html)
#### 程序升级
- Lighthttpd环境禁止多个目录运行`PHP`程序:
- 保存`config`目录和`上传目录`
- 将新程序下载至网站目录解压覆盖,然后将保存的文件替换既完成升级
```Lighthttpd
$HTTP["url"] =~ "^/(i|public)/" {
fastcgi.server = ()
}
```
- 或者参考:[https://blog.png.cm/981.html](https://blog.png.cm/981.html)
<details><summary><mark><font color=darkred>点击查看2.0版更新日志</font></mark></summary>
* 2022-1-19 v2.4.6 beta
* 2022-1-27 v2.4.7
- 优化页面排版
- 更改部分命名
- 增加后端压缩率
- 增加可以显示多条公告
- 增加上传后是否显示删除
- 增加可以关闭广场/统计导航|页面
- 调整登录和退出文件位置
- 调整二维码内容为每个页面
- 更换验证码库并不再区分大小写
- 修复一处有概率暴露图片绝对路径的bug
* 2022-1-22 v2.4.6
- 视图优化
- 删除重复内容
- 增加图片信息页面
@ -147,7 +172,6 @@ Deny from all
- 更新依赖件
- 修复统计错误
* 2021-11-9 v2.4.0
- 增加统计缓存
- 增加最近30天上传统计与占用空间图表
@ -156,7 +180,6 @@ Deny from all
- 删除广场会导致浏览速度变慢的代码
- 删除快捷配置会导致浏览速度变慢的代码
* 2021-11-3 v2.3.2
- 增加广场图片缓存
- 重构广场样式
@ -183,12 +206,11 @@ Deny from all
- 增加浏览页面启用选定日期查看图片
- 增加版本检测 ***每月10日06点和25日01点检测Github是否更新***
- 增加上传压缩 ***此压缩有可能使图片变大!特别是小图片 也有一定概率改变图片方向***
- 增加批量压缩目录 ***TinyImag或本机压缩本机压缩出现的问题***
- 增加批量压缩目录 ***TinyPng或本机压缩本机压缩出现的问题***
- 修复title
- 修复二级目录安装
- 修复对PHP5.6的兼容 ***建议使用php7.0及以上!***
* 2021-5-8 v2.1.1
- 修复上传界面上传失败提示信息bug
- 浏览页面重构
@ -204,7 +226,7 @@ Deny from all
- 增加删除图片url服务器不会保存删除链接
- 恢复随机浏览20张上传图片 可以设定浏览数量和关闭浏览
- - 随机浏览图片可以在线删除
- 可以使用 https://img.545141.com/libs/list.php?num=100 定义浏览数量
- 可以使用 https://png.cm/libs/list.php?num=100 定义浏览数量
- 修复一些调用
- 更改二维码显示方式
- 开启api 需要token验证上传
@ -230,7 +252,7 @@ RewriteRule config/(.*).(php)$ [F]
deny all;
}
```
- - 或者参考https://www.545141.com/992.html https://www.545141.com/939.html
- - 或者参考https://blog.png.cm/992.html https://blog.png.cm/939.html
- 一些精简
* 2021-4-14 v2.0.2.1 Dev1
@ -308,13 +330,29 @@ RewriteRule config/(.*).(php)$ [F]
</details>
#### 兼容性
## 支持开发者
|支付宝支持|微信支持|
|:----:|:----:|
|![支付宝支持](./public/images/alipay.jpg)|![微信支持](./public/images/wechat.jpg)|
## 界面演示
![简单图床 - 上传界面](https://i1.100024.xyz/i/2020/12/31/ulmtho.png)
![简单图床 - 广场界面](https://i1.100024.xyz/i/2020/12/31/2.png)
![简单图床 - 后台界面](https://i1.100024.xyz/i/2020/12/31/3.png)
![简单图床 - 统计界面](https://i1.100024.xyz/i/2020/12/31/4.png)
## 兼容
- 最低`PHP 5.6`,推荐`PHP 7.0`及以上版本需要PHP支持`Fileinfo,iconv,zip,mbstring,openssl`扩展,如果缺失会导致无法上传/删除图片
- 文件上传视图提供文件列表管理和文件批量上传功能,允许拖拽(需要`HTML5`支持)来添加上传文件,支持上传大图片,优先使用`HTML5`旧得浏览器自动使用`Flash和Silverlight`的方式兼容
- 最低`PHP 5.6`,推荐`PHP 7.0`及以上版本需要PHP支持`Fileinfo,iconv,zip,mbstring,openssl`扩展,如果缺失会导致无法上传/删除图片
- 文件上传视图提供文件列表管理和文件批量上传功能,允许拖拽(需要`HTML5`支持)来添加上传文件,支持上传大图片,优先使用`HTML5`旧得浏览器自动使用`Flash和Silverlight`的方式兼容
## 鸣谢
- [verot](https://github.com/verot/class.upload.php "verot" )
- [ZUI](https://github.com/easysoft/zui "ZUI" )
## 开源许可
<hr />
- 感谢: [verot](https://github.com/verot/class.upload.php "verot" )提供非常好用的class.upload.php上传类
- 感谢: [ZUI](https://github.com/easysoft/zui "ZUI" ) 提供前端框架
- [使用 GPL-2.0 开源许可协议](https://github.com/icret/EasyImages2.0/blob/master/LICENSE)
- [GPL-2.0](https://github.com/icret/EasyImages2.0/blob/master/LICENSE)
- Copyright © 2018 EasyImage dev By [Icret](https://github.com/icret)

File diff suppressed because it is too large Load Diff

View File

@ -7,9 +7,13 @@ require_once APP_ROOT . '/config/api_key.php';
require_once APP_ROOT . '/api/function_API.php';
require_once APP_ROOT . '/application/chart.php';
// 检测是否开启统计
if (!$config['chart_on']) exit(header('Location: ' . $config['domain'] . '?chart#closed'));
// 检测登录
if (!is_online()) {
if (!is_who_login('admin')) {
checkLogin();
exit(require_once APP_ROOT . '/application/footer.php');
}
// 删除统计文件
if (isset($_POST['del_total'])) {
@ -148,7 +152,7 @@ if (is_array($char_data)) {
formatter: '{value}%'
},
data: [{
value: <?php echo round((disk_total_space('.') - disk_free_space('.')) / disk_total_space('.') * 100,2); ?>,
value: <?php echo round((disk_total_space('.') - disk_free_space('.')) / disk_total_space('.') * 100, 2); ?>,
name: '已使用'
}]
}]
@ -235,7 +239,6 @@ if (is_array($char_data)) {
};
myChart.setOption(LineChart);
// 硬盘统计-饼状图
var myChart = echarts.init(document.getElementById('myPieChart'));
@ -277,6 +280,7 @@ if (is_array($char_data)) {
}
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(myPieChart);
@ -304,6 +308,9 @@ if (is_array($char_data)) {
dataIndex: currentIndex
});
}, 1000);
// 更改网页标题
document.title = "图床统计信息 - <?php echo $config['title']; ?>"
</script>
<?php require_once APP_ROOT . '/application/footer.php';

View File

@ -2,21 +2,29 @@
/*
* 登录页面
*/
require_once 'function.php';
require_once __DIR__ . '/../application/function.php';
require_once APP_ROOT . '/application/header.php';
require_once APP_ROOT . '/config/config.guest.php';
// 验证登录
header("Content-Type: text/html;charset=utf-8");
if (isset($_REQUEST['code'])) {
session_start();
if ($_REQUEST['code'] == $_SESSION['code']) {
if (strtolower($_REQUEST['code']) == $_SESSION['code']) {
// 提交登录
if (isset($_POST['password']) and isset($_POST['user'])) {
$postUser = $_POST['user'];
$postPWD = $_POST['password'];
if ($postUser == $config['user']) {
if ($postPWD == $config['password']) {
setcookie($postUser, $postPWD, time() + 3600 * 24 * 14, '/');
$postUser = strip_tags($_POST['user']);
$postPWD = strip_tags($_POST['password']);
global $guestConfig;
if ($postUser == $config['user'] || in_array($postPWD, $guestConfig)) {
if ($postPWD == $config['password'] || $postPWD == $guestConfig[$postUser]) {
// 将账号密码序列化后存储
$setCOK = serialize(array($postUser, $postPWD));
setcookie('auth', $setCOK, time() + 3600 * 24 * 14, '/');
echo '
<script>
new $.zui.Messager("登录成功", {type: "primary" // 定义颜色主题
@ -48,6 +56,38 @@ if (isset($_REQUEST['code'])) {
</script>';
}
}
// 退出
if (isset($_GET['login'])) {
if ($_GET['login'] = 'logout') {
if (isset($_COOKIE['auth'])) {
setcookie('auth', null, time() - 1, '/');
header("Refresh:2;url=../index.php");
echo '
<script>
new $.zui.Messager("退出成功", {
type: "success", // 定义颜色主题
icon: "ok-sign" // 定义消息图标
}).show();
// 延时2s跳转
window.setTimeout("window.location=\'../index.php\'",2000);
</script>
';
} else {
echo '
<script>
new $.zui.Messager("尚未登录", {
type: "danger", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
// 延时2s跳转
window.setTimeout("window.location=\'./index.php\'",2000);
</script>
';
}
}
}
?>
<form class="form-horizontal" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" onsubmit="return md5_post()">
<div class="form-group">
@ -63,12 +103,11 @@ if (isset($_REQUEST['code'])) {
</div>
<input type="hidden" name="password" id="md5_password">
</div>
<div class="form-group">
<label class="col-sm-2">验证码</label>
<div class="has-success col-md-3 col-sm-5">
<label><img src="<?php echo $config["domain"] . "/application/captcha.php"; ?>" onClick="this.src='<?php echo $config["domain"] . "/application/captcha.php"; ?>?nocache='+Math.random()" title="点击换一张" width="150px" height="40px" /></label>
<input class="form-control" type="text" name="code" value="" placeholder="请输入上方4位数验证码 - 注意大小写" />
<label><img src="<?php echo $config["domain"] . "/application/captcha.php"; ?>" onClick="this.src='<?php echo $config["domain"] . "/application/captcha.php"; ?>?nocache='+Math.random()" title="点击换一张" /></label>
<input class="form-control" type="text" name="code" value="" placeholder="请输入上方4位数验证码 - 不区分大小写" />
</div>
</div>
<div class="form-group">

View File

@ -2,23 +2,21 @@
/*
* 登录页面
*/
require_once __DIR__.'/../application/function.php';
require_once __DIR__ . '/../application/function.php';
require_once APP_ROOT . '/application/header.php';
?>
<div class="container">
<div class="row">
<div class="col-xs-3">
<ul class="nav nav-tabs nav-stacked">
<li class="active">
<a href="###" data-target="#tab3Content1" data-toggle="tab">服务条款</a>
<a href="#Terms" data-target="#tab3Content1" data-toggle="tab">服务条款</a>
</li>
<li>
<a href="###" data-target="#tab3Content2" data-toggle="tab">隐私政策</a>
<a href="#Privacy" data-target="#tab3Content2" data-toggle="tab">隐私政策</a>
</li>
<li>
<a href="###" data-target="#tab3Content3" data-toggle="tab">DMCA</a>
<a href="#DMCA" data-target="#tab3Content3" data-toggle="tab">DMCA</a>
</li>
</ul>
</div>
@ -31,56 +29,56 @@ require_once APP_ROOT . '/application/header.php';
<ol>
<li>您使用我们的网站进行除简单访问/查看之外的任何事情(即上传、下载、评论等),不仅构成您的同意,而且构成您的电子签名,这意味着您受这些条款的合同约束,并且通过我们的隐私政策。</li>
<li>我们保留在使用过多带宽或以其他方式滥用系统的用户帐户上禁用直接链接的权利。
<li>请勿上传儿童色情内容或威胁、骚扰、诽谤或鼓励非法行为的材料。不要使用本网站作为内容交付网络。如果你这样做(我们将成为法官),或者如果你做了任何违法的事情,除了我们可能拥有的任何其他合法权利之外,我们将禁止你以及你从中盗链的网站,删除你的所有图片,报告如有必要,您可以向当局报告,并阻止您查看本网站上托管的任何图像。我们是认真的。</li>
<li>用户必须同意遵守适用于其所在地的所有法律,包括版权和商标法。不允许使用侵犯版权或商标的图片。如果有人对您提出侵权索赔,您将被要求删除受版权保护的文件,直到问题得到解决。如果本网站的参与者之间存在争议,我们没有义务参与其中。</li>
<li>您可以匿名上传图像,并与您的朋友、家人、在线站点以及社交网络在线共享。</li>
<li>如果您在我们的网站上看到任何不应该出现的内容,因为它违反了我们的政策或出于任何其他原因,请通过电子邮件联系告知我们</li>
<li>声明通知中的信息准确无误,否则会受到伪证处罚。为此,请包括以下声明“我发誓,通知中的信息准确无误,并且我是(版权)所有者或被授权代表专有权的所有者行事,在作伪证的处罚下涉嫌侵权”。</li>
<li>请勿上传儿童色情内容或威胁、骚扰、诽谤或鼓励非法行为的材料。不要使用本网站作为内容交付网络。如果你这样做(我们将成为法官),或者如果你做了任何违法的事情,除了我们可能拥有的任何其他合法权利之外,我们将禁止你以及你从中盗链的网站,删除你的所有图片,报告如有必要,您可以向当局报告,并阻止您查看本网站上托管的任何图像。我们是认真的。</li>
<li>用户必须同意遵守适用于其所在地的所有法律,包括版权和商标法。不允许使用侵犯版权或商标的图片。如果有人对您提出侵权索赔,您将被要求删除受版权保护的文件,直到问题得到解决。如果本网站的参与者之间存在争议,我们没有义务参与其中。</li>
<li>您可以匿名上传图像,并与您的朋友、家人、在线站点以及社交网络在线共享。</li>
<li>如果您在我们的网站上看到任何不应该出现的内容,因为它违反了我们的政策或出于任何其他原因,请通过电子邮件联系告知我们</li>
<li>声明通知中的信息准确无误,否则会受到伪证处罚。为此,请包括以下声明: “我发誓,通知中的信息准确无误,并且我是(版权)所有者或被授权代表专有权的所有者行事,在作伪证的处罚下涉嫌侵权”。</li>
</ol>
<p>如果发生调查,本网站承诺与任何和所有法律机构合作。</p>
</div>
<div class="tab-pane fade" id="tab3Content2">
<h4>隐私政策</h4>
<hr>
<h4>一般</h4>
<p>当您访问本网站或使用本政策中进一步概述的服务(“服务”)时,本网站致力于保护您的隐私。作为使用本网站服务的条件,您同意向本网站提供某些个人信息。该信息包括但不限于电子邮件地址和您计算机的唯一 IP 地址(如果有)、财务信息(您的 Paypal 帐户使用的电子邮件地址)和人口统计信息(例如,邮政编码、邮政编码、家乡、性别、购买历史信息和年龄以及不是您计算机独有的 IP 地址)。请注意,我们不会在本网站的任何地方故意收集 13 岁以下儿童的联系信息或财务信息。请定期查看本隐私政策,因为我们可能会不时对其进行更新。本隐私政策的最后修订日期为 2021年10月25日。您每次访问本网站、使用服务或向我们提供信息时即表示您当时接受本隐私政策中描述的做法。您同意通过使用本网站您明确并肯定地同意我们使用和披露您提供的信息并同意接收电子邮件如下面的隐私政策所述。</p>
<h4>隐私政策变更</h4>
<h4>一般: </h4>
<p>当您访问本网站或使用本政策中进一步概述的服务(“服务”)时,本网站致力于保护您的隐私。作为使用本网站服务的条件,您同意向本网站提供某些个人信息。该信息包括但不限于: 电子邮件地址和您计算机的唯一 IP 地址(如果有)、财务信息(您的 Paypal 帐户使用的电子邮件地址)和人口统计信息(例如,邮政编码、邮政编码、家乡、性别、购买历史信息和年龄以及不是您计算机独有的 IP 地址)。请注意,我们不会在本网站的任何地方故意收集 13 岁以下儿童的联系信息或财务信息。请定期查看本隐私政策,因为我们可能会不时对其进行更新。本隐私政策的最后修订日期为 2021年10月25日。您每次访问本网站、使用服务或向我们提供信息时即表示您当时接受本隐私政策中描述的做法。您同意通过使用本网站您明确并肯定地同意我们使用和披露您提供的信息并同意接收电子邮件如下面的隐私政策所述。</p>
<h4>隐私政策变更: </h4>
<p>随着新功能添加到网站或我们纳入用户的建议,本政策可能会随着时间的推移进行修订。如果我们打算以与我们收集信息时声明的方式大不相同的方式使用或披露您的个人身份信息,您将可以选择我们是否以这种新方式使用或披露您的信息。我们还将在我们的网站显着位置发布隐私政策已修订的通知,以便您可以随时查看我们收集的信息、我们将如何使用该信息以及在何种条件下我们将向任何人披露这些信息。</p>
<h4>如何使用您的信息</h4>
<h4>如何使用您的信息: </h4>
<p>我们使用联系信息(即您的电子邮件地址)来帮助我们有效地执行帐户任务(更改密码、找回丢失的密码)、提供您请求的服务、执行质量保证、销售分析和其他业务分析,并就相关事宜与您联系与您向我们下的任何订单。除非满足任何法律、法规、政府要求或司法命令,否则不会将您的财务信息用于其他用途。当您通过本网站进行购买或在本网站注册时,您将向我们提供一个电子邮件地址,我们或这些服务提供商可能会出于本段所述目的与您联系。</p>
<h4>联系您获取优惠和促销信息</h4>
<p>您同意,考虑到我们提供的服务的使用,允许我们使用您的个人信息向您发送营销和促销材料。我们也可能向您发送宣传第三方产品的营销和宣传材料。我们不会出租或出售您的个人信息以供第三方使用。这些材料可能包括但不限于向您提供有关如何使用服务的附加信息的时事通讯,以及来自我们或第三方的商品和服务的促销优惠。</p>
<h4>人口统计信息的使用</h4>
<h4>联系您获取优惠和促销信息: </h4>
<p>您同意,考虑到我们提供的服务的使用,允许我们使用您的个人信息向您发送营销和促销材料。我们也可能向您发送宣传第三方产品的营销和宣传材料。我们不会出租或出售您的个人信息以供第三方使用。这些材料可能包括但不限于: 向您提供有关如何使用服务的附加信息的时事通讯,以及来自我们或第三方的商品和服务的促销优惠。</p>
<h4>人口统计信息的使用: </h4>
<p>我们可能会使用您的人口统计信息进行业务分析或根据您的兴趣定制网站和通讯。我们可能会与广告商和其他第三方共享匿名的汇总人口统计信息,以便他们可以针对适当的受众定制广告和通信。在本隐私政策允许我们共享您的联系信息或财务信息的任何时候,我们也可能会同时共享您的人口统计信息。</p>
<h4>向政府实体披露</h4>
<h4>向政府实体披露: </h4>
<p>当我们确定此类披露是遵守法律、与执法部门合作或寻求执法协助或保护我们或网站其他访问者或用户的利益或安全时,我们可能会披露特定的联系信息。服务。此外,如果我们发生合并、收购、合并、剥离或破产,您的联系信息可能会传递给第三方。</p>
<h4>Cookie 和其他网站跟踪数据的使用</h4>
<p>Cookies “cookie”是我们保存在您计算机硬盘上的包含非个人信息的小文件。这些 cookie 有助于让您更快地访问您已经访问过的页面。它们还允许您个性化您的页面,并优化您在我们网站上的体验。我们还使用 cookie 来帮助我们了解有多少人访问了我们的网站、他们访问了我们的哪些网页以及他们在那里停留的时间。此信息可帮助我们确定我们的哪些网络功能非常成功以及哪些网站可能需要改进。您可以通过在浏览器的首选项或选项菜单中指明这一点来禁用计算机上的 cookie。大多数浏览器会自动接受 cookie但允许您禁用它们。禁用 cookie 可能会阻止您正确使用服务或访问网站。</p>
<h4>会话 ID</h4>
<h4>Cookie 和其他网站跟踪数据的使用: </h4>
<p>Cookies : “cookie”是我们保存在您计算机硬盘上的包含非个人信息的小文件。这些 cookie 有助于让您更快地访问您已经访问过的页面。它们还允许您个性化您的页面,并优化您在我们网站上的体验。我们还使用 cookie 来帮助我们了解有多少人访问了我们的网站、他们访问了我们的哪些网页以及他们在那里停留的时间。此信息可帮助我们确定我们的哪些网络功能非常成功以及哪些网站可能需要改进。您可以通过在浏览器的首选项或选项菜单中指明这一点来禁用计算机上的 cookie。大多数浏览器会自动接受 cookie但允许您禁用它们。禁用 cookie 可能会阻止您正确使用服务或访问网站。</p>
<h4>会话 ID: </h4>
<p>“会话 ID”允许我们在多个网页请求中识别特定用户。此会话 ID 会尽可能保存在您的 cookie 文件中。如果 cookie 未启用,或者如果用户的 Internet 浏览器程序不支持 cookie则我们将在请求的网页中放置会话 ID。这使最终用户不必为每个网页请求不断地重新输入某些信息例如帐户名和密码。每当用户关闭其 Internet 浏览器时,此会话 ID 就会过期。</p>
<h4>网站跟踪、报告</h4>
<h4>网站跟踪、报告: </h4>
<p>我们的许多网页还包含特殊的电子图像(称为“单像素 gif”或“gif”使我们能够仅收集非个人身份的流量统计数据和有关我们网站访问者的其他汇总信息。IMX.to通过自身或第三方使用此技术收集和积累匿名数据帮助我们了解和分析访问我们网站的人的体验并连同您提供的其他信息定制您未来的访问并改进我们的网站网站。例如我们捕获有关所用浏览器类型、操作系统软件例如 Windows 95 98 Macintosh、cookie 偏好(用户是否打开或关闭它们)和搜索引擎关键字(哪些关键字做了什么)的数据。访问者用于访问我们的网站)。我们还记录了访问次数,所采取的路径,以及在我们网站内的站点和页面上花费的时间。请记住,这些信息都不是个人身份信息,我们只将这些信息分发给我们的内部员工以及与我们签署了保密协议的合作伙伴。我们与合作伙伴共享的任何信息都反映了整个网站或 Internet 使用趋势,而不是个别信息。</p>
<h4>IP地址</h4>
<h4>IP地址: </h4>
<p>每次您访问本网站时,我们都会自动收集您的 IP 地址和您来自的网页。为了为您管理和优化站点并诊断我们站点的问题,我们使用您的 IP 地址来帮助识别您的身份并收集有关您的广泛人口统计信息。</p>
<h4>来自其他网站的信息</h4>
<h4>来自其他网站的信息: </h4>
<p>我们可能会放置指向其他方运营的其他网站的链接,并且可能会不时在我们的促销电子邮件中包含指向第三方网站的信息和链接。其中一些其他网站包含我们的品牌名称和商标以及我们拥有的其他知识产权;其他人没有。当您点击这些链接并访问这些其他网站时,无论它们是否包含我们的品牌名称、商标和其他知识产权,您都需要注意,我们不控制这些其他网站或这些其他网站”商业惯例,并且本隐私政策不适用于这些其他网站。因此,这些其他网站的运营商可能会收集有关您的不同类型的信息,并且可能以不同于我们在网站上收集信息的方式使用和披露该信息。我们鼓励您查看他们的隐私政策,并提醒您我们不对他们的行为负责。</p>
<h4>信息存储</h4>
<h4>信息存储: </h4>
<p>您理解并同意我们在服务器上存储和处理您的信息,并且通过向我们提供任何数据,您同意将此类信息传输到网站服务器。当您从我们帐户中删除文件时,您与该文件之间将不再存在任何链接。删除的文件可能会缓存在我们服务器中以节省带宽,以防其他人请求它们。</p>
<h4>如何联系我们</h4>
<h4>如何联系我们: </h4>
<p>如果您对您提交给我们这个隐私政策或信息有任何疑问,您可以通过邮件方式联系我们</p>
</div>
<div class="tab-pane fade" id="tab3Content3">
<h4>数字千年版权法案</h4>
<hr>
<p>要向我们提交版权侵权通知,您需要发送书面通知,其中包含《数字千年版权法》第 512(c)(3) 条要求和规定的信息。</p>
<p>要撰写适当的 DMCA 通知,请说明以下信息</p>
<p>要撰写适当的 DMCA 通知,请说明以下信息: </p>
<ol>
<li>表明自己是您认为受到侵犯的版权作品或专有权的所有者,或代表此类所有者行事的人,并提供物理签名(纸质形式时)或电子签名(电子形式时) )。</li>
<li>指明您认为受到侵权的受版权保护的作品,或者如果有大量作品受到侵权,请提供作品的代表性清单。</li>
<li>通过在我们站点上提供包含这些材料的 Web URL确定侵犯您的版权作品的材料的位置。请不要发送附加的图像、pdf 或其他文件格式的文件,而只能发送包含我们网址的列表。在信函正文中提供所有 URL 是帮助我们快速处理您的请求的最佳方式。</li>
<li>说明您的联系信息,包括您的姓名、街道地址、电话号码和电子邮件地址。如果您代表版权所有者行事,请同时说明您与版权所有者的关系(例如律师、供应商、代理人)。</li>
<li>声明您“真诚地相信上述材料的使用未经版权所有者、其代理人或法律授权”。</li>
<li>声明通知中的信息准确无误,否则会受到伪证处罚。为此,请包括以下声明“我发誓,通知中的信息准确无误,并且我是(版权)所有者或被授权代表专有权的所有者行事,在作伪证的处罚下涉嫌侵权”。</li>
<li>声明通知中的信息准确无误,否则会受到伪证处罚。为此,请包括以下声明: “我发誓,通知中的信息准确无误,并且我是(版权)所有者或被授权代表专有权的所有者行事,在作伪证的处罚下涉嫌侵权”。</li>
<li>请用中文书写,所有电子邮件是任何其他语言都将被忽略。</li>
<li>要行使您的 DMCA 权利,您必须将适当的 DMCA 通知发送至我们的指定代理至电子邮件。</li>
</ol>
@ -92,8 +90,9 @@ require_once APP_ROOT . '/application/header.php';
</div>
</div>
<script>
// Title
document.title = "服务条款 - <?php echo $config['title']; ?>";
// Title
document.title = "服务条款 - <?php echo $config['title']; ?>";
</script>
<?php
require_once APP_ROOT . '/application/footer.php';

View File

@ -7,9 +7,13 @@ require_once APP_ROOT . '/config/api_key.php';
require_once APP_ROOT . '/api/function_API.php';
require_once APP_ROOT . '/application/chart.php';
// 检测是否开启统计
if (!$config['chart_on']) exit(header('Location: ' . $config['domain'] . '?chart#closed'));
// 检测登录
if (!is_online()) {
if (!is_who_login('admin')) {
checkLogin();
exit(require_once APP_ROOT . '/application/footer.php');
}
// 删除统计文件
if (isset($_POST['del_total'])) {
@ -45,9 +49,7 @@ if (is_array($char_data)) {
$chart_disk .= $value;
}
}
?>
<style>
.autoshadow {
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1);
@ -81,7 +83,6 @@ if (is_array($char_data)) {
<hr />
<?php printf("%u 张", read_total_json('filenum')); ?>
</div>
<div class="col-md-2 col-xs-2 alert alert-primary autoshadow">
缓存文件
<hr />
@ -108,8 +109,6 @@ if (is_array($char_data)) {
<?php echo getDistUsed(disk_free_space('.')); ?>
</div>
</div>
<div class="col-md-12 col-xs-12">
<div class="col-md-6 col-xs-12">
<h4>文件统计(张)</h4>
@ -159,8 +158,6 @@ if (is_array($char_data)) {
};
var myBarChart = $('#myBarChart').barChart(data, options);
// 最近30上传趋势与空间占用-折线图
var ctx = $("#myChart").get(0).getContext("2d");
@ -194,7 +191,6 @@ if (is_array($char_data)) {
var myLineChart = $("#myChart").lineChart(data, options);
// 硬盘统计-饼状图
var data = [{
value: <?php echo round(disk_free_space('.') / 1024 / 1024 / 1024, 2); ?>,

View File

@ -97,18 +97,23 @@ if ($handle->uploaded) {
// 上传成功后返回json数据
$imageUrl = $config['imgurl'] . config_path() . $handle->file_dst_name;
// 判断PHP版本启用删除
if (PHP_VERSION >= '7') {
$delUrl = $config['domain'] . '/application/del.php?hash=' . urlHash(config_path() . $handle->file_dst_name, 0);
// 关闭上传后显示加密删除链接
if ($config['show_user_hash_del']) {
// 判断PHP版本启用删除
if (PHP_VERSION >= '7') {
$delUrl = $config['domain'] . '/application/del.php?hash=' . urlHash(config_path() . $handle->file_dst_name, 0);
} else {
$delUrl = "Sever PHP version lower 7.0";
}
} else {
$delUrl = "Sever PHP version lower 7.0 and does't support deletion";
$delUrl = "Admin closed delete";
}
$reJson = array(
"result" => "success",
"code" => 200,
"url" => $imageUrl,
"thumb" => $config['domain'] . '/application/thumb.php?img=' . config_path() . $handle->file_dst_name . '&width=300&height=300',
"thumb" => $config['domain'] . '/application/thumb.php?img=' . config_path() . $handle->file_dst_name . '&width=258&height=258',
"del" => $delUrl,
);
echo json_encode($reJson, JSON_UNESCAPED_UNICODE);
@ -119,7 +124,6 @@ if ($handle->uploaded) {
"result" => "failed",
"code" => 403,
"message" => $handle->error,
//"log" => $handle->log,
);
exit(json_encode($reJson, JSON_UNESCAPED_UNICODE));

View File

@ -1,49 +1,61 @@
<?php
session_start(); //设置session
$width = 150; //设置图片宽为300像素
$height = 40; //设置图片高为40像素
require __DIR__ . "/function.php";
$image = imagecreatetruecolor($width, $height); //设置验证码大小的函数
$bgcolor = imagecolorallocate($image, 255, 255, 255); //验证码颜色RGB为(255,255,255)#ffffff
imagefill($image, 0, 0, $bgcolor); //区域填充
//创建背景画布
$img_w = 270;
/*宽*/
$img_h = 50;
$cap_code = "";
for ($i = 0; $i < 4; $i++) {
$fontsize = 12; //设置字体大小
$fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));
//数字越大颜色越浅这里是深颜色0-120
$data = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890'; //添加字符串
$fontcontent = substr($data, rand(0, strlen($data)), 1); //去除值,字符串截取方法
$cap_code .= $fontcontent; //.=连续定义变量
$x = ($i * 150 / 4) + rand(5, 10);
$y = rand(5, 10);
//设置坐标
imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
$img = imagecreatetruecolor($img_w, $img_h);
$bg_color = imagecolorallocate($img, 0xcc, 0xcc, 0xcc);
imagefill($img, 0, 0, $bg_color);
//生成验证码
$count = 4;
$code = "";
/*生成的验证码内容范围*/
$charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
$str_len = strlen($charset) - 1;
/*for循环打印输出验证码*/
for ($i = 0; $i < $count; $i++) {
$code .= $charset[rand(0, $str_len)];
}
$_SESSION['code'] = $cap_code; //存到session
/*strtolower函数将输入的验证码自动转换为小写用户不需要特意区分大小写*/
$_SESSION['code'] = strtolower($code);
//设置干扰元素,设置雪花点
/*字体大小*/
$font_size = 24;
/*字体文件位置*/
$fontfile = APP_ROOT . $config['textFont'];
for ($i = 0; $i < $count; $i++) {
$font_color = imagecolorallocate($img, mt_rand(0, 100), mt_rand(0, 50), mt_rand(0, 255));
imagettftext(
$img,
$font_size,
mt_rand(0, 20) - mt_rand(0, 25),
($img_w * $i / 4) + mt_rand(0, 15),
mt_rand($img_h / 2, $img_h),
$font_color,
realpath($fontfile),
$code[$i]
);
}
/*背景干扰点点*/
for ($i = 0; $i < 300; $i++) {
$inputcolor = imagecolorallocate($image, rand(50, 200), rand(20, 200), rand(50, 200));
//设置颜色20-200颜色比数字浅不干扰阅读
imagesetpixel($image, rand(1, 149), rand(1, 39), $inputcolor);
//画一个单一像素的元素
$color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagesetpixel($img, mt_rand(0, $img_w), mt_rand(0, $img_h), $color);
}
/*干扰线条*/
for ($i = 0; $i < 5; $i++) {
$color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imageline($img, mt_rand(0, $img_w), 0, mt_rand(0, $img_h), $img_h, $color);
imagesetpixel($img, mt_rand(0, $img_w), mt_rand(0, $img_h), $color);
}
//增加干扰元素,设置横线(先设置线的颜色,在设置横线)
for ($i = 0; $i < 4; $i++) {
$linecolor = imagecolorallocate($image, rand(20, 220), rand(20, 220), rand(20, 220));
//设置线的颜色
imageline($image, rand(1, 149), rand(1, 39), rand(1, 299), rand(1, 149), $linecolor);
}
//因为有些浏览器访问的content-type会是文本型所以我们需要设置成图片的格式类型
header('Content-Type:image/png');
imagepng($image); //建立png函数
// 因为有些浏览器访问的content-type会是文本型所以我们需要设置成图片的格式类型
header("content-type:image/png");
imagepng($img); //建立png函数
imagedestroy($image);

View File

@ -9,7 +9,7 @@ foreach ($expand as $val) {
if (!extension_loaded($val)) {
echo '
<script>
new $.zui.Messager("扩展:' . $val . '- 未安装,可能导致图片上传失败请尽快修复。", {
new $.zui.Messager("扩展:' . $val . '- 未安装,可能导致图片上传失败! 请尽快修复。", {
type: "black", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
@ -18,10 +18,10 @@ foreach ($expand as $val) {
}
}
// 检测是否更改默认域名
if (strstr('localhost', $_SERVER['HTTP_HOST'])) {
if (strstr('localhost|127.0.0.1', $_SERVER['HTTP_HOST'])) {
echo '
<script>
new $.zui.Messager("请修改默认域名,可能会导致图片访问异常!", {type: "black" // 定义颜色主题
new $.zui.Messager("请修改默认域名,可能会导致网站访问异常! ", {type: "black" // 定义颜色主题
}).show();
</script>
';
@ -30,7 +30,7 @@ if (strstr('localhost', $_SERVER['HTTP_HOST'])) {
if ($config['password'] === 'e6e061838856bf47e1de730719fb2609') {
echo '
<script>
new $.zui.Messager("请修改默认密码,否则会有泄露风险", {type: "warning" // 定义颜色主题
new $.zui.Messager("请修改默认密码,否则会有泄露风险! ", {type: "warning" // 定义颜色主题
}).show();
</script>
';
@ -43,7 +43,7 @@ if (!is_file(APP_ROOT . '/config/EasyIamge.lock')) {
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">
<i class="icon icon-heart"> </i><a href="https://www.545141.com/846.html" target="_blank">简单图床-EasyImage2.0</a> 安装环境检测</h4>
<i class="icon icon-heart"> </i><a href="https://blog.png.cm/846.html" target="_blank">简单图床-EasyImage2.0</a> 安装环境检测</h4>
</div>
<div class="modal-body">
<h4>说明:</h4>
@ -100,7 +100,8 @@ if (!is_file(APP_ROOT . '/config/EasyIamge.lock')) {
</div>
</div>
</div>
<script>$("#myModal-1").modal({
<script>
$("#myModal-1").modal({
keyboard: true,
moveable: true,
backdrop: "static",//点击空白处不关闭对话框

View File

@ -10,7 +10,7 @@ require_once APP_ROOT . '/config/api_key.php';
/**
* @param string $floder 文件夹
* @param string 压缩方式Imgcompress / TinyImag
* @param string 压缩方式Imgcompress / TinyPng
*/
function compress($floder, $type = 'Imgcompress', $source = '')
{
@ -20,11 +20,12 @@ function compress($floder, $type = 'Imgcompress', $source = '')
if ($type == 'Imgcompress') {
$pic = getFile($floder); // 文件夹路径
$percent = $config['compress_ratio'] / 100; // 压缩率
foreach ($pic as $value) {
$boxImg = $floder . $value;
// 跳过动态图片
if (!isAnimatedGif($boxImg)) {
$img = new Imgcompress($boxImg, 1);
$img = new Imgcompress($boxImg, $percent);
$img->compressImg($boxImg);
echo '<pre>' . $boxImg . '</pre><br />';
// 释放
@ -33,13 +34,13 @@ function compress($floder, $type = 'Imgcompress', $source = '')
}
}
if ($type == 'TinyImg') {
if (empty($config['TinyImag_key'])) {
exit('请先申请TinyImag key并保存再试');
if ($type == 'TinyPng') {
if (empty($config['TinyPng_key'])) {
exit('请先申请TinyPng key并保存再试!');
}
$folder = '..' . $config['path'] . $source;
$tinyImg = new TinyImg();
$key = $config['TinyImag_key'];
$key = $config['TinyPng_key'];
$input = $folder; //这个文件夹下的文件会被压缩
$output = $folder; //压缩的结果会被保存到这个文件夹中
$tinyImg->compressImgsFolder($key, $input, $output);

View File

@ -7,8 +7,9 @@ require_once 'header.php';
require_once APP_ROOT . '/application/compress/function.compress.php';
// 检测登录
if (!is_online()) {
if (!is_who_login('admin')) {
checkLogin();
exit(require_once APP_ROOT . '/application/footer.php');
}
// 文件夹压缩
if (isset($_POST['folder'])) {
@ -54,9 +55,9 @@ echo '
<font color="red">Imgcompress</font> 对自身机器要求高,如图片过多会导致脚本崩溃或者超时(已经预处理超时和脚本崩溃处理,但是有概率重现)!
<font color="red">TinyImag</font> https://tinify.cn/ 提供的API需要自行申请对服务器要求较低但是对网络要求高如在国内可能导致非常慢而超时崩溃已预处理但是有概率重现
<font color="red">TinyPng</font> https://tinify.cn/ 提供的API需要自行申请对服务器要求较低但是对网络要求高如在国内可能导致非常慢而超时崩溃已预处理但是有概率重现
获取TinyImag key https://tinify.cn/developers 并填入 <font color="red">/config/api_key.php</font> 文件。
获取TinyPng key https://tinify.cn/developers 并填入 <font color="red">/config/api_key.php</font> 文件。
</h4></pre>
';

View File

@ -26,7 +26,7 @@ if (empty($_REQUEST)) {
</script>
';
//header("refresh:3;url=".$config['domain']."");
} elseif (isset($_GET['url'])) {
$img = $_GET['url'];
echo '
@ -43,7 +43,7 @@ if (isset($_GET['hash'])) {
}
// 检查登录后再处理url删除请求
if (is_online()) {
if (is_who_login('admin')) {
if (isset($_GET['url'])) {
getDel($_GET['url'], 'url');
}
@ -51,15 +51,15 @@ if (is_online()) {
if (isset($_GET['url'])) {
echo '
<script>
new $.zui.Messager("登录再删除", {
new $.zui.Messager("使用管理员账号登录再删除!", {
type: "danger", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
// 延时2s跳转
window.setTimeout("window.location=\'/../application/login.php \'",2000);
window.setTimeout("window.location=\'/../admin/index.php \'",3000);
</script>
';
//header("refresh:2;url=".$config['domain']."/application/login.php");
//header("refresh:2;url=".$config['domain']."/admin/index.php");
}
}

View File

@ -1,82 +1,70 @@
<!-- 对话框HTML -->
<div class="modal fade" id="myModal">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">×</span>
<span class="sr-only">关闭</span></button>
<p class="modal-title icon icon-mobile" style="text-align: center">扫描二维码使用手机上传</p>
</div>
<div class="modal-body" align="center">
<input id="text" type="hidden" value="" />
<p id="qrcode"></p>
<?php if ($config['ad_bot']) echo $config['ad_bot_info']; // 底部广告
?>
<footer class="text-muted small col-md-12" style="text-align: center;">
<hr>
<!-- 对话框HTML -->
<div class="modal fade" id="myModal">
<div class="modal-dialog modal-sm">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">x</span>
<span class="sr-only">关闭</span></button>
<p class="modal-title icon icon-mobile" style="text-align: center">扫描二维码使用手机上传</p>
</div>
<div class="modal-body">
<p id="qrcode"></p>
</div>
</div>
</div>
</div>
</div>
<?php if (!empty($config['footer'])) echo $config['footer']; // 页脚信息
?>
<p>
© 2018-<?php echo date("Y"); ?>
<a href="https://png.cm/" target="_blank"> EasyImage</a>
<a href="https://github.com/icret/EasyImages2.0" target="_blank" rel="nofollow"><?php echo $config['version']; ?></a>
<a href="https://blog.png.cm" target="_blank"> By Icret</a>
<a href="/admin/terms.php" target="_blank"> DMCA</a>
<!-- 二维码对话框触发按钮 -->
<a href="#" data-position="center" data-moveable="inside" data-moveable="true" data-toggle="modal" data-target="#myModal" title="使用手机扫描二维码访问"><i class="icon icon-qrcode hidden-xs inline-block"></i></a>
<?php
// 登录与退出
if (is_who_login('admin')||is_who_login('guest')) {
echo '<a href="' . $config['domain'] . '/admin/index.php?login=logout" title="退出账号"><i class="icon icon-signout"></i></a>';
} else {
echo '<a href="' . $config['domain'] . '/admin/index.php" title="账号登录"><i class="icon icon-user"></i></a>';
}
?>
</p>
</footer>
<?php
// 自定义代码
if ($config['customize']) echo $config['customize'];
// 环境检测
checkEnv($config['checkEnv']);
?>
<script>
// js二维码 获取当前网址并赋值给id=text的value
document.getElementById("text").value = window.location.href;
// js 获取当前网址二维码
var qrcode = new QRCode(document.getElementById("qrcode"), {
width: 200,
height: 200,
text: window.location.href,
width: 265,
height: 256,
colorDark: "#353535",
colorLight: "#F1F1F1",
correctLevel: QRCode.CorrectLevel.H
});
function makeCode() {
var elText = document.getElementById("text");
if (!elText.value) {
alert("Input a text");
elText.focus();
return;
}
qrcode.makeCode(elText.value);
}
makeCode();
$("#text").on("blur",
function() {
makeCode();
}).on("keydown",
function(e) {
if (e.keyCode == 13) {
makeCode();
}
});
// NProgress
NProgress.start();
NProgress.done();
// console
console.log("%cEasyImage 简单图床", "background: rgba(252,234,187,1);background: -moz-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%,rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: -webkit-gradient(left top, right top, color-stop(0%, rgba(252,234,187,1)), color-stop(12%, rgba(175,250,77,1)), color-stop(28%, rgba(0,247,49,1)), color-stop(39%, rgba(0,210,247,1)), color-stop(51%, rgba(0,189,247,1)), color-stop(64%, rgba(133,108,217,1)), color-stop(78%, rgba(177,0,247,1)), color-stop(87%, rgba(247,0,189,1)), color-stop(100%, rgba(245,22,52,1)));background: -webkit-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: -o-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: -ms-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: linear-gradient(to right, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fceabb', endColorstr='#f51634', GradientType=1 );font-size:2.34em;font-weight:bold")
console.log('%c图床演示网站 https://img.545141.com/ \n本程序由 Icret 独自开发并完全开源,碰到收费发布的请不要轻易付款;\n本人仅为程序开源创作如非法网站使用与本人无关请勿用于非法用途\n作为开发者你可以对相应的后台功能进行扩展增删改相应代码,但请保留代码中相关来源信息(例如:本人博客,邮箱等)。\n请为本人博客 https://www.545141.com/ 加上链接,谢谢尊重!%c ', 'color: #eaad1a; padding:5px 0; border:1px solid #448ef6; font-size:12px;', '');
console.log("%cEasyImage2.0", "background: rgba(252,234,187,1);background: -moz-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%,rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: -webkit-gradient(left top, right top, color-stop(0%, rgba(252,234,187,1)), color-stop(12%, rgba(175,250,77,1)), color-stop(28%, rgba(0,247,49,1)), color-stop(39%, rgba(0,210,247,1)), color-stop(51%, rgba(0,189,247,1)), color-stop(64%, rgba(133,108,217,1)), color-stop(78%, rgba(177,0,247,1)), color-stop(87%, rgba(247,0,189,1)), color-stop(100%, rgba(245,22,52,1)));background: -webkit-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: -o-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: -ms-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: linear-gradient(to right, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fceabb', endColorstr='#f51634', GradientType=1 );font-size:2.34em;font-weight:bold")
console.log('%c图床演示网站: https://png.cm \n请为本人博客 https://blog.png.cm/ 加上链接, 谢谢尊重!\n作为开发者你可以对相应的后台功能进行扩展(增删改相应代码), 但请保留代码中相关来源信息(例如: 本人博客, 邮箱等);\n本程序由 Icret 独自开发并完全开源, 碰到收费发布的请不要轻易付款; 本人仅为程序开源创作, 如非法网站使用与本人无关, 请勿用于非法用途.%c ', 'color: #eaad1a; padding:5px 0; border:1px solid #448ef6; font-size:12px;', '');
</script>
<footer class="text-muted small col-md-12" style="text-align: center;margin-bottom: 10px"><?php if ($config['ad_bot']) { echo $config['ad_bot_info'];} ?>
<?php if ($config['customize']) { echo $config['customize'];} ?>
<hr>
<!-- 对话框触发按钮 -->
<a href="#" data-position="center" data-moveable="inside" data-moveable="true" data-toggle="modal" data-target="#myModal"><i class="icon icon-qrcode"></i>二维码 </a>
<?php
if (is_online()) {
echo '<a href="' . $config['domain'] . '/application/logout.php" ><i class="icon icon-signout"></i>退出 </a>';
} else {
echo '<a href="' . $config['domain'] . '/application/login.php" ><i class="icon icon-user"></i>登录 </a>';
}
if (isset($config['footer'])) {
echo '<div>' . $config['footer'] . '
Copyright © 2018-' . date('Y') . '
<a href="https://img.545141.com/" target="_blank"> EasyImage</a> By
<a href="https://www.545141.com" target="_blank"> Icret</a> Version:
<a href="https://github.com/icret/EasyImages2.0" target="_blank"> ' . $config['version'] . '</a>
<a href="/admin/terms.php" target="_blank"> DMCA</a>
</div>';
}
?>
</footer>
</body>
</html>

View File

@ -1,8 +1,13 @@
<?php
require_once __DIR__ . '/../config/base.php';
require_once APP_ROOT . '/config/config.php';
require_once APP_ROOT . '/config/config.guest.php';
// 判断GIF图片是否为动态
/**
* 判断GIF图片是否为动态
* @param $filename string 文件
* @return int
*/
function isAnimatedGif($filename)
{
$fp = fopen($filename, 'rb');
@ -11,55 +16,29 @@ function isAnimatedGif($filename)
return strpos($filecontent, chr(0x21) . chr(0xff) . chr(0x0b) . 'NETSCAPE2.0') === FALSE ? 0 : 1;
}
// 校验登录
/**
* 校验登录
*/
function checkLogin()
{
global $guestConfig;
global $config;
// 获取配置密码 配置密码为md5加密
$config_password = $config['password'];
$config_user = $config['user'];
// 如果存在post并且通过设置cookie
if (isset($_POST['user'])) {
$postUser = $_POST['user'];
if ($postUser === $config_user) {
if (isset($_POST['password'])) {
$postPWD = $_POST['password'];
if ($postPWD === $config_password) {
setcookie($postUser, $postPWD, time() + 3600 * 24 * 14, '/');
echo '
<script>
new $.zui.Messager("登录成功", {
type: "primary", // 定义颜色主题
icon: "ok-sign" // 定义消息图标
}).show();
</script>';
header("refresh:2;url=" . $config['domain'] . "");
} else {
echo '
<script>
new $.zui.Messager("密码错误", {
type: "danger", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
</script>';
exit(header("refresh:1;"));
}
}
} else {
echo '
<script>
$.zui.Messager("用户名错误", {type: "danger" // 定义颜色主题
}).show();
// 无cookie
if (empty($_COOKIE['auth'])) {
echo '
<script>
new $.zui.Messager("请登录后再上传!", {type: "danger" // 定义颜色主题
}).show();
</script>';
exit(header("refresh:2;"));
}
header("refresh:1;url=" . $config['domain'] . "/admin/index.php");
}
// 存在cookie 但是cookie错误
if (isset($_COOKIE[$config_user])) {
$cookieAdmin = $_COOKIE[$config_user];
if ($cookieAdmin != $config_password) {
// 存在cookie 但是cookie错误
if (isset($_COOKIE['auth'])) {
$getCOK = unserialize($_COOKIE['auth']);
if (!$getCOK) {
echo '
<script>
new $.zui.Messager("密码已更改,请重新登录", {
@ -67,24 +46,25 @@ function checkLogin()
icon: "exclamation-sign" // 定义消息图标
}).show();
</script>';
//header('loction:login.php');
exit(include __DIR__ . '/login.php');
header("refresh:2;url=" . $config['domain'] . "/admin/index.php");
}
}
// 无cookie
if (empty($_COOKIE[$config_user])) {
echo '
<script>
new $.zui.Messager("请登录后再上传!", {type: "danger" // 定义颜色主题
}).show();
</script>';
//header('loction:login.php');
exit(include __DIR__ . '/login.php');
if ($getCOK[1] != $config['password'] && $getCOK[1] !== $guestConfig[$getCOK[0]]) {
echo '
<script>
new $.zui.Messager("密码已更改,请重新登录", {
type: "special", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
</script>';
exit(header("refresh:2;url=" . $config['domain'] . "/admin/index.php"));
}
}
}
// 仅允许登录后上传
/**
* 仅允许登录后上传
*/
function mustLogin()
{
global $config;
@ -93,7 +73,11 @@ function mustLogin()
}
}
// 检查配置文件中目录是否存在是否可写并创建相应目录
/**
* 检查配置文件中目录是否存在是否可写并创建相应目录
* @param null $path 要创建的路径
* @return string
*/
function config_path($path = null)
{
global $config;
@ -109,11 +93,14 @@ function config_path($path = null)
if (!is_writable($img_path)) {
@chmod($img_path, 0755);
}
return $img_path;
}
// 图片命名规则
/**
* 图片命名规则
* @param null $source 源文件名称
* @return false|int|string|null
*/
function imgName($source = null)
{
global $config;
@ -155,12 +142,16 @@ function imgName($source = null)
}
}
// 静态文件CDN
/**
* 静态文件CDN
*/
function static_cdn()
{
global $config;
if ($config['static_cdn']) {
echo $config['static_cdn_url'];
} else {
echo $config['domain'];
}
}
/*
@ -176,7 +167,11 @@ function getExtensions()
}
*/
// 获取目录大小 如果目录文件较多将很费时
/**
* 获取目录大小 如果目录文件较多将很费时
* @param $path string 路径
* @return int
*/
function getDirectorySize($path)
{
$bytestotal = 0;
@ -208,11 +203,13 @@ function getFileNumber($dir)
return $num;
}
/*
/**
* 图片展示页面
* getDir()取文件夹列表getFile()取对应文件夹下面的文件列表,二者的区别在于判断有没有“.”后缀的文件,其他都一样
* 获取文件目录列表,该方法返回数组
* 调用方法getDir("./dir")……
* @param $dir string 路径
* @return mixed
* @example getDir("./dir")
*/
function getDir($dir)
{
@ -232,7 +229,11 @@ function getDir($dir)
return $dirArray;
}
// 获取文件列表
/**
* 获取文件列表
* @param $dir string 目录
* @return mixed
*/
function getFile($dir)
{
$fileArray[] = NULL;
@ -256,10 +257,47 @@ function getFile($dir)
return $fileArray;
}
/* 递归函数实现遍历指定文件下的目录与文件数量
/**
* 获取文件夹文件列表或数量
* @param string $dir_fileName_suffix 获取文件列表:目录+文件名*:全匹配+文件后缀 *: 全匹配 {jpg,png,gif}:匹配指定格式
* 递归文件数量:目录
* @example get_file_by_glob(__DIR__ . '/i/thumbnails/*.*', $type = 'list'); // 获取目录文件列表
* @example get_file_by_glob(__DIR__ . '/i/', $type = 'number'); // 递归获取文件夹数量
* @param string $type list|number 返回列表还是数量
* @return array|int 返回数组|数量
*/
function get_file_by_glob($dir_fileName_suffix, $type = 'list')
{
$glob = glob($dir_fileName_suffix, GLOB_BRACE);
// 获取所有文件
if ($type == 'list') {
foreach ($glob as $v) {
if (is_file($v)) $res[] = basename($v);
}
}
if ($type == 'number') {
$res = 0;
$glob = glob($dir_fileName_suffix); //把该路径下所有的文件存到一个数组里面;
foreach ($glob as $v) {
if (is_file($v)) {
$res++;
} else {
$res += get_file_by_glob($v . "/*", $type = 'number');
}
}
}
return $res;
}
/**
* 递归函数实现遍历指定文件下的目录与文件数量
* 用来统计一个目录下的文件和目录的个数
* echo "目录数为:{$dirn}<br>";
* echo "文件数为:{$filen}<br>";
* @param $file string 目录
*/
function getdirnum($file)
{
@ -281,9 +319,12 @@ function getdirnum($file)
closedir($dir);
}
/* 把文件或目录的大小转化为容易读的方式
/**
* 把文件或目录的大小转化为容易读的方式
* disk_free_space - 磁盘可用空间(比如填写D盘某文件夹则会现在D盘剩余空间
* disk_total_space 磁盘总空间(比如填写D盘某文件夹则会现在D盘总空间
* @param $number
* @return string
*/
function getDistUsed($number)
{
@ -303,16 +344,21 @@ function getDistUsed($number)
return $number . $dw;
}
// 根据url填写active
/**
* 根据url填写active
* @param $url string 要过滤的链接
* @return string
*/
function getActive($url)
{
$arr = $_SERVER['SCRIPT_NAME'];
if (strpos($arr, $url)) {
return 'active';
return 'class="active;"';
}
}
/* 加密/解密图片路径
/**
* 加密/解密图片路径
* @param string $data 要加密的内容
* @param int $mode =1或0 1解密 0加密
*/
@ -328,7 +374,11 @@ function urlHash($data, $mode)
}
}
// 删除指定文件
/**
* 删除指定文件
* @param $url string 文件
* @param $type string 模式
*/
function getDel($url, $type)
{
global $config;
@ -381,17 +431,24 @@ function getDel($url, $type)
clearstatcache();
}
// 获取登录状态
function is_online()
/**
* 判断是否此用户登录
* @param $user string 需要判断的用户名
* @return bool |
*/
function is_who_login($user)
{
global $config;
$config_user = $config['user'];
$config_password = $config['password'];
if (empty($_COOKIE[$config_user]) || $_COOKIE[$config_user] != $config_password) {
return false;
} else {
return true;
global $guestConfig;
$getCOK = unserialize($_COOKIE['auth']);
if (!$getCOK) return false;
if ($user == 'admin') {
if ($getCOK[1] == $config['password']) return true;
}
if ($user == 'guest') {
if ($getCOK[0] !== $guestConfig[$getCOK[0]]) return true;
}
return false;
}
/**
@ -402,6 +459,7 @@ function is_online()
* 检测是否更改默认域名
*
* 检测是否修改默认密码
* @param $mode bool 是否开启检测
*/
function checkEnv($mode)
{
@ -415,8 +473,10 @@ function checkEnv($mode)
}
}
// 前端改变图片长宽
/**
* 前端改变图片长宽
* @return string 裁剪参数
*/
function imgRatio()
{
global $config;
@ -461,8 +521,8 @@ function imgRatio()
/**
* 定时获取GitHub 最新版本
* @return mixed|null 读取版本信息
*/
function getVersion()
{
global $config;
@ -495,7 +555,11 @@ function getVersion()
return null;
}
// 删除非空目录
/**
* 删除非空目录
* @param $dir string 要删除的目录
* @return bool true|false
*/
function deldir($dir)
{
if (file_exists($dir)) {
@ -517,7 +581,13 @@ function deldir($dir)
}
}
// curl访问网站并返回解码过的json信息
/**
* 图片监黄curl 访问网站并返回解码过的json信息
* @param $img string 图片url
* @param null $url 访问的网址
* @return mixed
*/
function moderatecontent_json($img, $url = null)
{
global $config;
@ -541,7 +611,10 @@ function moderatecontent_json($img, $url = null)
return $output;
}
// 检查图片是否违规
/**
* 检查图片是否违规
* @param $imageUrl string 图片url
*/
function checkImg($imageUrl)
{
global $config;
@ -563,7 +636,10 @@ function checkImg($imageUrl)
}
}
// 还原被审查的图片
/**
* 还原被审查的图片
* @param $name string 要还原的图片
*/
function re_checkImg($name)
{
global $config;
@ -574,7 +650,10 @@ function re_checkImg($name)
rename($now_path_file, $to_file);
}
// 创建缩略图
/**
* 创建缩略图
* @param $imgName string 需要创建缩略图的名称
*/
function creat_thumbnail_images($imgName)
{
require_once __DIR__ . '/class.thumb.php';
@ -588,11 +667,15 @@ function creat_thumbnail_images($imgName)
}
if (!isAnimatedGif($old_img_path)) { // 仅针对非gif创建图片缩略图
$new_imgName = APP_ROOT . $config['path'] . 'thumbnails/' . date('Y_m_d') . '_' . $imgName; // 缩略图缓存的绝对路径
Thumb::out($old_img_path, $new_imgName, 300, 300); // 保存缩略图
Thumb::out($old_img_path, $new_imgName, 258, 258); // 保存缩略图
}
}
// 根据请求网址路径返回缩略图网址
/**
* 根据请求网址路径返回缩略图网址
* @param $url string 图片链接
* @return string
*/
function return_thumbnail_images($url)
{
global $config;
@ -612,13 +695,17 @@ function return_thumbnail_images($url)
}
}
// 在线输出缩略图
/**
* 在线输出缩略图
* @param $imgUrl string 图片链接
* @return string 缩略图链接
*/
function get_online_thumbnail($imgUrl)
{
global $config;
if ($config['thumbnail']) {
$imgUrl = str_replace($config['imgurl'], '', $imgUrl);
return $config['domain'] . '/application/thumb.php?img=' . $imgUrl . '&width=300&height=300';
return $config['domain'] . '/application/thumb.php?img=' . $imgUrl . '&width=258&height=258';
} else {
return $imgUrl;
}
@ -633,6 +720,8 @@ function creat_thumbnail_by_list($imgUrl)
{
global $config;
ini_set('max_execution_time', '60'); // 脚本运行的时间以秒为单位0不限制
// 关闭缩略图
if ($config['thumbnail'] === 0) {
return $imgUrl;
@ -662,7 +751,8 @@ function creat_thumbnail_by_list($imgUrl)
// 缓存文件是否存在
if (file_exists(APP_ROOT . $config['path'] . 'thumbnails/' . $imgName)) {
// 存在则返回缓存文件
return $config['imgurl'] . $config['path'] . 'thumbnails/' . $imgName;
$tumImgUrl = $config['imgurl'] . $config['path'] . 'thumbnails/' . $imgName;
return $tumImgUrl;
} else {
// PHP老他妈缺图像扩展支持不是缺webp就是缺ico总不能都他妈装上吧直接把这些二货扩展名忽略
@ -687,23 +777,26 @@ function creat_thumbnail_by_list($imgUrl)
$new_imgName = $cache_path . $imgName;
// 创建并保存缩略图
Thumb::out($abPathName, $new_imgName, 300, 300);
Thumb::out($abPathName, $new_imgName, 258, 258);
// 输出缩略图
return $new_imgName;
// return $new_imgName;
return $imgUrl;
}
}
}
/* 获取当前页面完整URL地址
* 返回 http://localhost/ww/index.php
/**
* 获取当前页面完整URL地址
* https://www.php.cn/php-weizijiaocheng-28181.html
* $search 返回指定搜索文字之前的内容(不含搜索文字)
* @param null $search string 返回指定搜索文字之前的内容(不含搜索文字)
* @return false|string 返回读取网址
*/
function get_whole_url($search = null)
{
$sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
$php_self = $_SERVER['SCRIPT_NAME'] ? $_SERVER['SCRIPT_NAME'] : $_SERVER['SCRIPT_NAME'];
$php_self = isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : $_SERVER['SCRIPT_NAME'];
$path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
$relate_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $php_self . (isset($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : $path_info);
$whole_domain = $sys_protocal . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '') . $relate_url;
@ -715,7 +808,14 @@ function get_whole_url($search = null)
}
}
// 配置写入
/**
* 配置写入
* @param $filename string 要存储的源文件名称
* @param $values array 获取到的数组
* @param string $var 源文件的数组名称
* @param bool $format 不知道啥作用
* @return bool
*/
function cache_write($filename, $values, $var = 'config', $format = false)
{
$cachefile = $filename;
@ -723,7 +823,13 @@ function cache_write($filename, $values, $var = 'config', $format = false)
return writefile($cachefile, $cachetext);
}
// 数组转换成字串
/**
* 数组转换成字串
* @param array $array 要转换的数组
* @param bool $format 不知道啥作用
* @param int $level 层级
* @return string
*/
function arrayeval($array, $format = false, $level = 0)
{
$space = $line = '';
@ -749,7 +855,13 @@ function arrayeval($array, $format = false, $level = 0)
return $evaluate;
}
// 配置写入文件
/**
* 配置写入文件
* @param $filename string 要写入的文件名
* @param $writetext array 要写入的文字
* @param string $openmod 写文件模式
* @return bool
*/
function writefile($filename, $writetext, $openmod = 'w')
{
if (false !== $fp = fopen($filename, $openmod)) {
@ -762,12 +874,10 @@ function writefile($filename, $writetext, $openmod = 'w')
}
}
/*
/**
* 获得用户的真实IP地址
* <br />来源ecshop
* <br />$_SERVER和getenv的区别getenv不支持IIS的isapi方式运行的php
* @access public
* @return string
* 来源ecshop
* @return mixed|string string
*/
function real_ip()
{
@ -812,15 +922,15 @@ function real_ip()
return $realip;
}
/*
/**
* IP黑白名单检测支持IP段检测
* @param string $ipNow 要检测的IP
* @param string|array $ipList 白名单IP或者黑名单IP
* @return boolean false|true true:白名单模式false:黑名单模式
* @return bool
*/
function checkIP($ipNow = null, $ipList = null, $model = false)
{
// global $config;
$ipNow = isset($ipNow) ?: real_ip();
// 将IP文本转换为数组

View File

@ -7,67 +7,66 @@ require_once APP_ROOT . '/application/total_files.php';
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><?php echo $config['title']; ?></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="renderer" content="webkit" />
<meta name="force-rendering" content="webkit" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?php echo $config['title']; ?></title>
<meta name="keywords" content="<?php echo $config['keywords']; ?>" />
<meta name="description" content="<?php echo $config['description']; ?>" />
<link rel="shortcut icon" href="<?php echo $config['domain']; ?>/favicon.ico" type="image/x-icon" />
<link rel="dns-prefetch" href="<?php echo $config['imgurl']; ?>" />
<link rel="dns-prefetch" href="<?php echo $config['static_cdn_url']; ?>" />
<link href="<?php static_cdn(); ?>/public/static/zui/css/zui.min.css?v1.10.0" rel="stylesheet">
<link href="<?php static_cdn(); ?>/public/static/zui/theme/zui-theme-<?php echo $config['theme']; ?>.css?v1" rel="stylesheet">
<link href="<?php static_cdn(); ?>/public/static/zui/lib/uploader/zui.uploader.min.css?v1.10.0" rel="stylesheet">
<link href="<?php static_cdn(); ?>/public/static/nprogress.min.css?v0.2.0" rel="stylesheet">
<script src="<?php static_cdn(); ?>/public/static/zui/lib/jquery/jquery-3.4.1.min.js?v3.4.1"></script>
<script src="<?php static_cdn(); ?>/public/static/zui/js/zui.min.js?v1.10.0"></script>
<script src="<?php static_cdn(); ?>/public/static/qrcode.min.js?v2.0"></script>
<script src="<?php static_cdn(); ?>/public/static/zui/lib/clipboard/clipboard.min.js?vv1.5.5"></script>
<link href="<?php static_cdn(); ?>/public/static/zui/css/zui.min.css" rel="stylesheet">
<link href="<?php static_cdn(); ?>/public/static/zui/theme/zui-theme-<?php echo $config['theme']; ?>.css" rel="stylesheet">
<link href="<?php static_cdn(); ?>/public/static/zui/lib/uploader/zui.uploader.min.css" rel="stylesheet">
<link href="<?php static_cdn(); ?>/public/static/nprogress.min.css" rel="stylesheet">
<script src="<?php static_cdn(); ?>/public/static/zui/lib/jquery/jquery-3.4.1.min.js"></script>
<script src="<?php static_cdn(); ?>/public/static/zui/js/zui.min.js"></script>
<script src="<?php static_cdn(); ?>/public/static/qrcode.min.js"></script>
<script src="<?php static_cdn(); ?>/public/static/zui/lib/clipboard/clipboard.min.js"></script>
<script src="<?php static_cdn(); ?>/public/static/nprogress.min.js"></script>
<style>
.uploader-files {
min-height: 160px;
border-style: dashed;
}
@media screen and (min-width:960px) {
.listNum img {
width: 268px;
height: 268px;
}
}
</style>
<!--[if lt IE 9]>
<script src="public/static/zui/lib/ieonly/html5shiv.js"></script>
<script src="public/static/zui/lib/ieonly/respond.js"></script>
<script src="public/static/zui/lib/ieonly/excanvas.js"></script>
<script src="<?php static_cdn(); ?>/public/static/zui/lib/ieonly/html5shiv.js"></script>
<script src="<?php static_cdn(); ?>/public/static/zui/lib/ieonly/respond.js"></script>
<script src="<?php static_cdn(); ?>/public/static/zui/lib/ieonly/excanvas.js"></script>
<![endif]-->
</head>
<body class="container">
<?php if ($config['ad_top']) {
echo $config['ad_top_info'];
} ?>
<?php
if ($config['ad_top']) echo $config['ad_top_info']; ?>
<div class="page-header">
<ul class="nav nav-pills">
<li class="<?php echo getActive('index'); ?>">
<a href="<?php echo $config['domain']; ?>/index.php">
<li <?php echo getActive('index'); ?>>
<a href="<?php echo $config['domain']; ?>">
<i class="icon icon-home"></i> 首页
</a>
</li>
<li class="<?php echo getActive('list'); ?>">
<a href="<?php echo $config['domain']; ?>/application/list.php?date=<?php echo date('Y/m/d/') ?>&num=<?php echo $config['listNumber']; ?>">
<i class="icon icon-th"></i> 广场
<span class="label label-badge label-success">
<?php echo getFileNumber(APP_ROOT . config_path()); ?></span>
<?php
// 关闭广场非登录状态不显示广场导航
if ($config['showSwitch'] || is_who_login('admin'))
echo '
<li ' . getActive('list') . '>
<a href="' . $config['domain'] . '/application/list.php">
<i class="icon icon-th"></i> 广场 <span class="label label-badge label-success">' . get_file_by_glob(APP_ROOT . config_path(), 'number') . '</span>
</a>
</li>
<?php
if (is_online()) {
echo '
<li class="' . getActive('admin.inc') . '";><a href="' . $config['domain'] . '/admin/admin.inc.php' . '"><i class="icon icon-cogs"></i> 设置</a></li>
<li class="' . getActive('chart') . '";><a href="' . $config['domain'] . '/admin/chart.php' . '"><i class="icon icon-pie-chart"></i> 统计</a></li>
';
';
// 登陆状态显示设置页面
if (is_who_login('admin')) {
echo '
<li ' . getActive('admin.inc') . ';><a href="' . $config['domain'] . '/admin/admin.inc.php' . '">
<i class="icon icon-cogs"></i> 设置</a>
</li>
';
// 登陆状态下开启统计页面与导航
if ($config['chart_on'])
echo '
<li ' . getActive('chart') . '><a href="' . $config['domain'] . '/admin/chart.php' . '">
<i class="icon icon-pie-chart"></i> 统计</a>
</li>
';
}
?>
</ul>

View File

@ -1,6 +1,8 @@
<?php
include_once __DIR__ . "/header.php";
if (!$config['show_exif_info']) exit(header('Location: ' . $config['domain'] . '?exif#closed'));
// 获取图片
if (isset($_GET['img'])) {
@ -28,19 +30,19 @@ clearstatcache();
?>
<div class="col-md-12">
<div class="col-md-6" style="text-align: center;">
<a href="<?php echo $img; ?>" data-toggle="lightbox" data-group="image-group-1"><img src="<?php echo $img; ?>" id="img1" width="50%" height="50%" class="img-rounded" alt=" <?php echo basename($img); ?>"></a>
<a href="<?php echo $config['imgurl'] . $img; ?>" data-toggle="lightbox" data-group="image-group-1"><img src="<?php echo $config['imgurl'] . $img; ?>" id="img1" width="50%" height="50%" class="img-rounded" alt=" <?php echo basename($img); ?>"></a>
</div>
<div class="col-md-6">
<h4>名称: <?php echo pathinfo($img, PATHINFO_FILENAME); ?></h4>
<h4>类型: <?php echo pathinfo($img, PATHINFO_EXTENSION); ?></h4>
<h4>宽高: <span id="wh"></span>px</h4>
<h4>大小: <?php echo getDistUsed($imgSize); ?></h4>
<h4>名称: <?php echo pathinfo($img, PATHINFO_FILENAME); ?></h4>
<h4>类型: <?php echo pathinfo($img, PATHINFO_EXTENSION); ?></h4>
<h4>宽高: <span id="wh"></span>px</h4>
<h4>大小: <?php echo getDistUsed($imgSize); ?></h4>
<h4>上传时间: <?php echo date("Y-m-d H:i:s", $upTime); ?></h4>
<h4>使用设备: <span id="makeAndModel"></span></h4>
<div class="col-md-12">
<p>
<button type="button" class="btn btn-primary btn-sm" data-toggle="collapse" data-target="#collapseExample">更多Exif信息 <i class="icon icon-caret-down"></i></button>
<a class="btn btn-primary btn-sm" href="<?php echo $getIMG; ?>" target="_blank">下载图片 <i class="icon icon-download-alt"></i></a>
<button type="button" class="btn btn-primary btn-sm" data-toggle="collapse" data-target="#collapseExample">Exif 信息 <i class="icon icon-caret-down"></i></button>
<a class="btn btn-primary btn-sm" href="<?php echo $getIMG; ?>" target="_blank">查看图片 <i class="icon icon-picture"></i></a>
<a class="btn btn-primary btn-sm" href="/application/del.php?url=<?php echo $getIMG; ?>" target="_blank">删除图片 <i class="icon icon-trash"></i></a>
</p>
<div class="collapse" id="collapseExample">
@ -141,7 +143,7 @@ clearstatcache();
});
}
// 更改网页标题
document.title = "图片<?php echo basename($img); ?>的Exif信息 - <?php echo $config['title']; ?> "
document.title = "图片<?php echo basename($img); ?>的Exif信息 - <?php echo $config['title']; ?>"
</script>
<?php
include_once __DIR__ . "/footer.php";

View File

@ -1,24 +1,25 @@
<?php
require_once __DIR__ . '/header.php';
echo '<div class="col-md-12">';
if (!$config['showSwitch'] and !is_online()) {
if (!$config['showSwitch'] && !is_who_login('admin')) {
echo '<div class="alert alert-info">管理员关闭了预览哦~~</div>';
} else {
$path = isset($_GET['date']) ? $_GET['date'] : date('Y/m/d/'); // 获取指定目录
$path = preg_replace("/^d{4}-d{2}-d{2} d{2}:d{2}:d{2}$/s", "", trim($path)); // 过滤非日期,删除空格
$keyNum = isset($_GET['num']) ? $_GET['num'] : $config['listNumber']; // 获取指定浏览数量
$keyNum = preg_replace("/[^0-9]/", "", trim($keyNum)); // 过滤非数字,删除空格
$fileArr = getFile(APP_ROOT . config_path($path)); // 统计当日上传数量
$path = isset($_GET['date']) ? $_GET['date'] : date('Y/m/d/'); // 获取指定目录
$path = preg_replace("/^d{4}-d{2}-d{2} d{2}:d{2}:d{2}$/s", "", trim($path)); // 过滤非日期,删除空格
$keyNum = isset($_GET['num']) ? $_GET['num'] : $config['listNumber']; // 获取指定浏览数量
$keyNum = preg_replace("/[\W]/", "", trim($keyNum)); // 过滤非数字,删除空格
// $fileArr = getFile(APP_ROOT . config_path($path)); // 获取当日上传列表
$fileType = isset($_GET['search']) ? '*.' . preg_replace("/[\W]/", "", $_GET['search']) : '*.*'; // 按照图片格式
$fileArr = get_file_by_glob(APP_ROOT . config_path($path) . $fileType, 'list'); // 获取当日上传列表
echo '
<ul id="dowebok">
<div class="cards listNum" >';
<div class="cards listNum">';
if ($fileArr[0]) {
foreach ($fileArr as $key => $value) {
if ($key < $keyNum) {
$imgUrl = $config['imgurl'] . config_path($path) . $value;
// 会导致速度变慢
// $re_img = str_replace($config['imgurl'], '', $imgUrl); // 图片相对路径 /i/2021/11/03/hg82t4.jpg
// <p>' . @getimagesize($imgUrl)[0] . 'x' . @getimagesize($imgUrl)[1] . 'px ' . getDistUsed(filesize(APP_ROOT . $re_img)) . '</p>
echo '
<div class="col-md-4 col-sm-6 col-lg-3">
<div class="card">
@ -44,7 +45,8 @@ if (!$config['showSwitch'] and !is_online()) {
}
// 当前日期全部上传
$allUploud = isset($_GET['date']) ? $_GET['date'] : date('Y/m/d/');
$allUploud = getFileNumber(APP_ROOT . $config['path'] . $allUploud);
$allUploud = get_file_by_glob(APP_ROOT . $config['path'] . $allUploud, 'number');
// 组合url
@$httpUrl = array('date' => $path, 'num' => getFileNumber(APP_ROOT . config_path($path)));
?>
</div>
@ -54,8 +56,22 @@ $allUploud = getFileNumber(APP_ROOT . $config['path'] . $allUploud);
<script src="<?php static_cdn(); ?>/public/static/viewjs/viewer.min.js"></script>
<link href="<?php static_cdn(); ?>/public/static/zui/lib/datetimepicker/datetimepicker.min.css" rel="stylesheet">
<script src="<?php static_cdn(); ?>/public/static/zui/lib/datetimepicker/datetimepicker.min.js"></script>
<style>
/** 图片列表*/
@media screen and (min-width:960px) {
.listNum img {
width: 258px;
height: 258px;
}
}
@media screen and (max-width:960px) {
.listNum img {
width: 358px;
height: 258px;
}
}
.card .bottom {
width: 100%;
position: absolute;
@ -64,8 +80,7 @@ $allUploud = getFileNumber(APP_ROOT . $config['path'] . $allUploud);
background-color: rgba(0, 0, 0, 0.5);
color: white;
}
</style>
<style>
/** 返回顶部*/
* {
list-style: none;
@ -79,7 +94,7 @@ $allUploud = getFileNumber(APP_ROOT . $config['path'] . $allUploud);
padding: 0;
position: absolute;
top: 0;
width: 149px;
width: 110px;
}
#rocket-to-top .level-2 {
@ -109,210 +124,239 @@ $allUploud = getFileNumber(APP_ROOT . $config['path'] . $allUploud);
position: fixed;
right: 0;
top: 80%;
width: 149px;
width: 110px;
z-index: 11;
}
</style>
<div class="col-md-12">
<hr />
<div class="col-md-8">
<div class="btn-group">
<a href="list.php?<?php echo http_build_query($httpUrl); ?>"><button class="btn btn-danger btn-mini">当前<?php echo $allUploud; ?>张</button></a>
<a href="list.php"><button class="btn btn-primary btn-mini">今日<?php echo read_total_json('todayUpload'); ?>张</button></a>
<a href="list.php?date=<?php echo date("Y/m/d/", strtotime("-1 day")) ?>"><button class="btn btn-mini hidden-xs inline-block">昨日<?php echo read_total_json('yestUpload'); ?>张</button></a>
<?php
for ($x = 2; $x <= 5; $x++) {
<div class="col-md-8 col-xs-12" style="padding-bottom:5px">
<div class="btn-toolbar">
<div class="btn-group">
<a class="btn btn-danger btn-mini" href="?<?php echo http_build_query($httpUrl); ?>">当前<?php echo $allUploud; ?></a>
<a class="btn btn-primary btn-mini" href="list.php">今日<?php echo get_file_by_glob(APP_ROOT . config_path() . '*.*', 'number'); ?></a>
<a class="btn btn-mini" href="?date=<?php echo date("Y/m/d/", strtotime("-1 day")) ?>">昨日<?php echo get_file_by_glob(APP_ROOT . $config['path'] . date("Y/m/d/", strtotime("-1 day")), 'number'); ?></a>
<?php
// 倒推日期显示上传图片
echo '<a href="list.php?date=' . date('Y/m/d/', strtotime("-{$x} day")) . '"> <button class="btn btn-mini hidden-xs inline-block">' . date('m月d日', strtotime("-{$x} day")) . '</button></a>';
}
echo '</div>';
if (is_online()) {
echo '
<div class="btn-group" style="padding:5px">
<button class="btn btn-mini" type="button" onclick="opcheckboxed(\'checkbox\', \'checkall\')">全选</button>
<button class="btn btn-mini" type="button" onclick="opcheckboxed(\'checkbox\', \'reversecheck\')">反选</button>
<button class="btn btn-mini btn-primary" type="button" onclick="opcheckboxed(\'checkbox\', \'uncheckall\')">取消</button>
<button class="btn btn-mini btn-danger" type="button" onclick="fun()">删除</button>
</div>';
} ?>
for ($x = 2; $x <= 6; $x++)
echo '<a class="btn btn-mini hidden-xs inline-block" href="?date=' . date('Y/m/d/', strtotime("-$x day")) . '">' . date('m月d日', strtotime("-$x day")) . '</a>';
?>
</div>
<div class="btn-group">
<a class="btn btn-mini" onclick="opcheckboxed('checkbox', 'checkall')">全选</a>
<a class="btn btn-mini" onclick="opcheckboxed('checkbox', 'reversecheck')">反选</a>
<a class="btn btn-mini" onclick="opcheckboxed('checkbox', 'uncheckall')">取消</a>
<a class="btn btn-mini" onclick="fun()">删除</a>
</div>
</div>
<div class="col-md-4">
<form class="form-inline" action="list.php" method="get">
<div class="form-group">
<input type="text" class="form-control form-date" value="<?php echo date('Y/m/d/'); ?>" name="date" readonly="readonly">
</div>
<!-- 按格式 -->
<div class="row">
<!--
<div class="col-md-2 col-xs-6">
<form action="list.php" method="get">
<div class="input-group">
<select name="search" class="form-control input-sm">
<option value="jpg">jpg</option>
<option value="png">png</option>
<option value="gif">gif</option>
</select>
<span class="input-group-btn">
<input type="submit" value="按格式" class="btn btn-primary input-sm" />
</span>
</div>
</form>
</div> -->
<div class="col-md-2 col-xs-6">
<div class="btn-group">
<a class="btn btn-sm" href="<?php echo '?' . http_build_query($httpUrl) . '&search=jpg'; ?>">JPG</a>
<a class="btn btn-sm" href="<?php echo '?' . http_build_query($httpUrl) . '&search=png'; ?>">PNG</a>
<a class="btn btn-sm" href="<?php echo '?' . http_build_query($httpUrl) . '&search=gif'; ?>">GIF</a>
<a class="btn btn-sm" href="<?php echo '?' . http_build_query($httpUrl) . '&search=webp'; ?>">Webp</a>
</div>
</div>
<!-- 按日期-->
<div class="col-md-2 col-xs-6">
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="get">
<div class="input-group">
<span class="input-group-addon fix-border fix-padding"></span>
<input type="text" class="form-control form-date input-sm" name="date" value="<?php echo date('Y/m/d/'); ?>" readonly="readonly">
<span class="input-group-btn">
<button type="submit" class="btn btn-primary input-sm">按日期</button>
</span>
</div>
<button type="submit" class="btn btn-primary">按日期</button>
</form>
</div>
</div>
<!-- 返回顶部 -->
<div style="display: none;" id="rocket-to-top">
<div style="opacity:0;display: block;" class="level-2"></div>
<div class="level-3"></div>
</div>
</div>
<!-- 返回顶部 -->
<div style="display: none;" id="rocket-to-top">
<div style="opacity:0;display: block;" class="level-2"></div>
<div class="level-3"></div>
</div>
<script>
//viewjs
var viewer = new Viewer(document.getElementById('dowebok'), {
url: 'data-original',
backdrop: true
});
<script>
//viewjs
var viewer = new Viewer(document.getElementById('dowebok'), {
url: 'data-original',
backdrop: true
});
// 复制url
var clipboard = new Clipboard('.copy');
clipboard.on('success', function(e) {
new $.zui.Messager("复制直链成功", {
type: "success", // 定义颜色主题
icon: "ok-sign" // 定义消息图标
}).show();
// 复制url
var clipboard = new Clipboard('.copy');
clipboard.on('success', function(e) {
new $.zui.Messager("复制直链成功", {
type: "success", // 定义颜色主题
icon: "ok-sign" // 定义消息图标
}).show();
});
clipboard.on('error', function(e) {
document.querySelector('.copy');
new $.zui.Messager("复制失败", {
type: "danger", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
});
});
clipboard.on('error', function(e) {
document.querySelector('.copy');
new $.zui.Messager("复制失败", {
type: "danger", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
});
// 取消/全选文件
function opcheckboxed(objName, type) {
var objNameList = document.getElementsByName(objName);
if (null != objNameList) {
for (var i = 0; i < objNameList.length; i++) {
if (objNameList[i].checked == true) {
if (type != 'checkall') { // 非全选
objNameList[i].checked = false;
}
} else {
if (type != 'uncheckall') { // 非取消全选
objNameList[i].checked = true;
}
// 取消/全选文件
function opcheckboxed(objName, type) {
var objNameList = document.getElementsByName(objName);
if (null != objNameList) {
for (var i = 0; i < objNameList.length; i++) {
if (objNameList[i].checked == true) {
if (type != 'checkall') { // 非全选
objNameList[i].checked = false;
}
} else {
if (type != 'uncheckall') { // 非取消全选
objNameList[i].checked = true;
}
}
}
}
//获取所有的 checkbox 属性的 input标签
function fun() {
confirm('确认要删除?\n* 删除文件夹后将无法恢复!');
obj = document.getElementsByName("checkbox");
check_val = [];
for (k in obj) {
//判断复选框是否被选中
if (obj[k].checked)
//获取被选中的复选框的值
check_val.push(obj[k].value);
console.log(check_val);
}
$.post("./post_del.php", {
'del_url_array': check_val
},
function(data) {
if (data.search('success') > 0) {
new $.zui.Messager("删除成功", {
type: "success", // 定义颜色主题
icon: "ok-sign" // 定义消息图标
}).show();
// 延时2秒刷新
window.setTimeout(function() {
window.location.reload();
}, 1500)
} else {
new $.zui.Messager("文件不存在", {
type: "danger", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
}
});
}
//获取所有的 checkbox 属性的 input标签
function fun() {
confirm('确认要删除?\n* 删除文件夹后将无法恢复!');
obj = document.getElementsByName("checkbox");
check_val = [];
for (k in obj) {
//判断复选框是否被选中
if (obj[k].checked)
//获取被选中的复选框的值
check_val.push(obj[k].value);
console.log(check_val);
}
// 返回顶部
$(function() {
var e = $("#rocket-to-top"),
t = $(document).scrollTop(),
n,
r,
i = !0;
$(window).scroll(function() {
var t = $(document).scrollTop();
t == 0 ? e.css("background-position") == "0px 0px" ? e.fadeOut("slow") : i && (i = !1, $(".level-2").css("opacity", 1), e.delay(100).animate({
marginTop: "-1000px"
},
"normal",
function() {
e.css({
"margin-top": "-125px",
display: "none"
}),
i = !0
})) : e.fadeIn("slow")
}),
e.hover(function() {
$(".level-2").stop(!0).animate({
opacity: 1
})
},
function() {
$(".level-2").stop(!0).animate({
opacity: 0
})
}),
$(".level-3").click(function() {
function t() {
var t = e.css("background-position");
if (e.css("display") == "none" || i == 0) {
clearInterval(n),
e.css("background-position", "0px 0px");
return
}
switch (t) {
case "0px 0px":
e.css("background-position", "-298px 0px");
break;
case "-298px 0px":
e.css("background-position", "-447px 0px");
break;
case "-447px 0px":
e.css("background-position", "-596px 0px");
break;
case "-596px 0px":
e.css("background-position", "-745px 0px");
break;
case "-745px 0px":
e.css("background-position", "-298px 0px");
}
}
if (!i) return;
n = setInterval(t, 50),
$("html,body").animate({
scrollTop: 0
},
"slow");
});
});
//懒加载
var lazy = new Lazy({
onload: function(elem) {
console.log(elem)
$.post("./post_del.php", {
'del_url_array': check_val
},
delay: 300
})
function(data) {
if (data.search('success') > 0) {
new $.zui.Messager("删除成功", {
type: "success", // 定义颜色主题
icon: "ok-sign" // 定义消息图标
}).show();
// 延时2秒刷新
window.setTimeout(function() {
window.location.reload();
}, 1500)
} else {
new $.zui.Messager("删除失败 请登录后再删除!", {
type: "danger", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
// 延时2s跳转
window.setTimeout("window.location=\'/../admin/index.php \'", 2000);
}
});
}
// 按日期浏览
$(".form-date").datetimepicker({
weekStart: 1,
todayBtn: 1,
autoclose: 1,
todayHighlight: 1,
startView: 2,
minView: 2,
forceParse: 0,
pickerPosition: "top-right",
format: "yyyy/mm/dd/",
endDate: new Date() // 只能选当前日期之前
});
// 更改网页标题
document.title = "图床广场 今日上传<?php echo read_total_json('todayUpload'); ?>张 昨日<?php echo read_total_json('yestUpload'); ?>张 - <?php echo $config['title']; ?> "
</script>
<?php require_once APP_ROOT . '/application/footer.php';
// 返回顶部
$(function() {
var e = $("#rocket-to-top"),
t = $(document).scrollTop(),
n,
r,
i = !0;
$(window).scroll(function() {
var t = $(document).scrollTop();
t == 0 ? e.css("background-position") == "0px 0px" ? e.fadeOut("slow") : i && (i = !1, $(".level-2").css("opacity", 1), e.delay(100).animate({
marginTop: "-1000px"
},
"normal",
function() {
e.css({
"margin-top": "-125px",
display: "none"
}),
i = !0
})) : e.fadeIn("slow")
}),
e.hover(function() {
$(".level-2").stop(!0).animate({
opacity: 1
})
},
function() {
$(".level-2").stop(!0).animate({
opacity: 0
})
}),
$(".level-3").click(function() {
function t() {
var t = e.css("background-position");
if (e.css("display") == "none" || i == 0) {
clearInterval(n),
e.css("background-position", "0px 0px");
return
}
switch (t) {
case "0px 0px":
e.css("background-position", "-298px 0px");
break;
case "-298px 0px":
e.css("background-position", "-447px 0px");
break;
case "-447px 0px":
e.css("background-position", "-596px 0px");
break;
case "-596px 0px":
e.css("background-position", "-745px 0px");
break;
case "-745px 0px":
e.css("background-position", "-298px 0px");
}
}
if (!i) return;
n = setInterval(t, 50),
$("html,body").animate({
scrollTop: 0
},
"slow");
});
});
//懒加载
var lazy = new Lazy({
onload: function(elem) {
console.log(elem)
},
delay: 300
})
// 按日期浏览
$(".form-date").datetimepicker({
weekStart: 1,
todayBtn: 1,
autoclose: 1,
todayHighlight: 1,
startView: 2,
minView: 2,
forceParse: 0,
pickerPosition: "top-right",
format: "yyyy/mm/dd/",
endDate: new Date() // 只能选当前日期之前
});
// 更改网页标题
document.title = "图床广场 今日上传<?php get_file_by_glob(APP_ROOT . config_path() . '*.*', 'number'); ?>张 昨日<?php echo get_file_by_glob(APP_ROOT . $config['path'] . date("Y/m/d/", strtotime("-1 day")) . '*.*', 'number'); ?>张 - <?php echo $config['title']; ?>"
</script>
<?php require_once APP_ROOT . '/application/footer.php';

View File

@ -1,32 +0,0 @@
<?php
require_once 'header.php';
$config_user = $config['user'];
if (isset($_COOKIE[$config_user ]) and $_COOKIE[$config_user] == $config['password']) {
setcookie($config['user'], null, time() - 1, '/');
header("Refresh:2;url=../index.php");
echo '
<script>
new $.zui.Messager("退出成功", {
type: "success", // 定义颜色主题
icon: "ok-sign" // 定义消息图标
}).show();
// 延时2s跳转
window.setTimeout("window.location=\'../index.php\'",2000);
</script>
';
} else {
echo '
<script>
new $.zui.Messager("尚未登录", {
type: "danger", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
// 延时2s跳转
window.setTimeout("window.location=\'./login.php\'",2000);
</script>
';
}
require_once 'footer.php';

View File

@ -5,30 +5,30 @@
*/
require_once __DIR__ . '/function.php';
if (!is_online()) {
exit('Not Logged!');
if (!is_who_login('admin')) {
exit('Not Logged!');
}
$del_url_array = isset($_POST['del_url_array']) ? $_POST['del_url_array'] : exit;
$del_num = count($del_url_array);
for ($i = 0; $i < $del_num; $i++) {
getDel($del_url_array[$i], 'url');
getDel($del_url_array[$i], 'url');
}
$path = '/i/cache/';
if (deldir($path)) {
echo '
<script> new $.zui.Messager("删除成功", {
echo '
<script> new $.zui.Messager("删除成功!", {
type: "success", // 定义颜色主题
icon: "ok-sign" // 定义消息图标
}).show();</script>';
header("refresh:1;"); // 1s后刷新当前页面
header("refresh:1;"); // 1s后刷新当前页面
} else {
echo '
<script> new $.zui.Messager("删除失败", {
echo '
<script> new $.zui.Messager("删除失败!", {
type: "danger", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();</script>';
header("refresh:1;"); // 1s后刷新当前页面
}
header("refresh:1;"); // 1s后刷新当前页面
}

View File

@ -10,7 +10,8 @@ function process($filePath, $absolutePath)
if ($config['compress']) {
if (!isAnimatedGif($absolutePath)) {
require_once __DIR__ . '/compress/Imagick/class.Imgcompress.php';
$img = new Imgcompress($absolutePath, 1);
$percent = $config['compress_ratio'] / 100; // 压缩率
$img = new Imgcompress($absolutePath, $percent);
$img->compressImg($absolutePath);
// 释放
ob_flush();

View File

@ -16,8 +16,8 @@ if (!file_exists($src)) {
exit('image does not exist');
}
$w = isset($_GET['width']) ? $_GET['width'] : 200; // 预生成缩略图的宽
$w = isset($_GET['width']) ? $_GET['width'] : 258; // 预生成缩略图的宽
$h = isset($_GET['height']) ? $_GET['height'] : 200; // 预生成缩略图的高
$h = isset($_GET['height']) ? $_GET['height'] : 258; // 预生成缩略图的高
Thumb::show($src, $w, $h);

View File

@ -1 +0,0 @@
安装环境检测锁定文件,如需再次展示请删除此文件!

View File

@ -7,14 +7,14 @@
* @email lemonim@qq.com
* @Github https://github.com/icret/easyImages2.0
* QQ Group 623688684
* @Last 2021-11-17 11:24:35
* @Last 2022-1-22 17:38:57
* 上传服务器后第一次打开会检查运行环境,请根据提示操作;
* 检查环境仅会在第一开始开始出现并在config目录下生成EasyImage.lock文件如需再次查看请删除此文件。
* 敬请注意:本程序为开源程序,你可以使用本程序在任何的商业、非商业项目或者网站中。但请你务必保留代码中相关信息页面logo和页面上必要的链接可以清除
* 敬请注意:本程序为开源程序,你可以使用本程序在任何非商业项目或者网站中。但请你务必保留代码中相关信息页面logo和页面上必要的链接可以更改
* 本人仅为程序开源创作,如非法网站与本人无关,请勿用于非法用途
* 请为本人博客(www.545141.com加上网址链接谢谢支持。作为开发者你可以对相应的后台功能进行扩展增删改相应代码,但请保留代码中相关来源信息(例如:本人博客,邮箱等)
* 请为本人博客(blog.png.cm加上网址链接谢谢支持。作为开发者你可以对相应的后台功能进行扩展增删改相应代码,但请保留代码中相关来源信息(例如:本人博客,邮箱等)
* 如果因安装问题或其他问题可以给我发邮件。
* 配置分为两大区块 - 1.基础配置 2.图床配置
@ -33,4 +33,4 @@
// 定义根目录
@define('APP_ROOT', str_replace('\\', '/', realpath(dirname(__FILE__) . '/../')));
// 判断当前的系统类型是否为windows
@define('IS_WIN', strstr(PHP_OS, 'WIN') ? 1 : 0);
@define('IS_WIN', strstr(PHP_OS, 'WIN') ? 1 : 0);

5
config/config.guest.php Executable file
View File

@ -0,0 +1,5 @@
<?php
$guestConfig=Array
(
'guest'=>'084e0343a0486ff05530df6c705c8bb4'
);

View File

@ -1,22 +1,24 @@
<?php
<?php
$config=Array
(
'title'=>'简单图床 - EasyImage',
'keywords'=>'简单图床,easyimage,无数据库图床,PHP多图长传程序,自适应页面,HTML5,markdown,bbscode,一键复制',
'description'=>'简单图床EasyImage是一款支持多文件上传的无数据库图床,可以完美替代PHP多图上传程序最新html5自适应页面兼容手机电脑上传后返回图片直链markdown图片论坛贴图bbscode链接简单方便支持一键复制支持多域名api上传。',
'tips'=>'本站仅做演示用,不定时清理图片单文件≤5M每次上传≤30张',
'tips'=>'<a><li class="icon icon-bullhorn text-muted"> 单文件≤10M单次上传≤30张</li></a>
<a href="https://github.com/icret/EasyImages2.0" target="_black"><i class="icon icon-heart"> 简单图床是一款开源图床, 支持多文件上传无数据库</i></a>
<a href="https://github.com/icret/EasyImages2.0" target="_black"><i class="icon icon-github"> 如果你喜欢这种图床风格就下载喔 (๑•̀ㅂ•́)و✧</i></a>',
'domain'=>'http://127.0.0.1',
'imgurl'=>'http://127.0.0.1',
'user'=>'admin',
'password'=>'e6e061838856bf47e1de730719fb2609',
'mustLogin'=>0,
'mustLogin'=>1,
'apiStatus'=>0,
'path'=>'/i/',
'imgName'=>'default',
'maxSize'=>5242880,
'maxSize'=>10485760,
'maxUploadFiles'=>30,
'watermark'=>0,
'waterText'=>'简单图床 - img.545141.com',
'waterText'=>'简单图床 - ww.png.cm',
'waterPosition'=>0,
'textColor'=>'255,0,0,1',
'textSize'=>16,
@ -24,6 +26,7 @@ $config=Array
'waterImg'=>'/public/images/watermark.png',
'extensions'=>'gif,jpeg,png,tif,bmp,tif,svg,webp,jpg,tga,svg,ico',
'compress'=>0,
'compress_ratio'=>80,
'thumbnail'=>1,
'imgConvert'=>'',
'maxWidth'=>10240,
@ -31,51 +34,51 @@ $config=Array
'minWidth'=>5,
'minHeight'=>5,
'imgRatio'=>0,
'image_x'=>800,
'image_y'=>800,
'image_x'=>0,
'image_y'=>0,
'imgRatio_quality'=>80,
'imgRatio_crop'=>0,
'imgRatio_preserve_headers'=>1,
'static_cdn'=>0,
'theme'=>'default',
'static_cdn_url'=>'https://cdn.jsdelivr.net/gh/icret/EasyImages2.0',
'TinyImag_key'=>'',
'TinyPng_key'=>'',
'moderatecontent_key'=>'',
'footer'=>'<a href="/admin/terms.php" target="_blank">请勿上传违反中国政策的图片</a>
<i class="icon icon-smile"></i> <br/>',
'footer'=>'<a href="/admin/terms.php" target="_blank">请勿上传违反中国政策的图片</a>',
'ad_top'=>0,
'ad_top_info'=>' <div id="ad" class="col-md-12" align="center" style="padding:5px;">
<!--广告 按照这个范例替换相应链接,如果想多几个广告,就多复制几个-->
<a href="https://app.cloudcone.com/?ref=3521" target="_blank"><img src="/public/images/ad.jpg" /></a>
</div>
',
'ad_top_info'=>' <!--广告 按照这个范例替换相应链接,如果想多几个广告,就多复制几个-->
<div class="col-md-12" style="text-align: center;margin:2px;">
<a href="https://app.cloudcone.com.cn/?ref=3521" target="_blank"><img src="/public/images/EasyImage2.0.png" /></a>
</div>',
'ad_bot'=>0,
'ad_bot_info'=>' <div id="ad" class="col-md-12" align="center" style="padding:5px;">
<!--广告 按照这个范例替换相应链接,如果想多几个广告,就多复制几个-->
<a href="https://app.cloudcone.com/?ref=3521" target="_blank"><img src="/public/images/ad.jpg" /></a>
</div>
',
'ad_bot_info'=>' <!--广告 按照这个范例替换相应链接,如果想多几个广告,就多复制几个-->
<div class="col-md-12" style="text-align: center;margin:2px;">
<a href="https://app.cloudcone.com.cn/?ref=3521" target="_blank"><img src="/public/images/EasyImage2.0.png" /></a>
</div>',
'showSwitch'=>1,
'listNumber'=>20,
'customize'=>' <!-- 百度统计代码-->
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?5320b69f4f1caa9328dfada73c8e6a75";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
'customize'=>' <!-- 百度统计代码-->
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?5320b69f4f1caa9328dfada73c8e6a75";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>',
'checkEnv'=>1,
'checkImg'=>0,
'checkImg_value'=>50,
'upload_logs'=>1,
'cache_freq'=>2,
'first_show'=>1,
'upload_first_show'=>1,
'show_user_hash_del'=>1,
'show_exif_info'=>1,
'chart_on'=>1,
'check_ip'=>0,
'check_ip_model'=>0,
'check_ip_list'=>'',
'version'=>'2.4.6 beta',
'form'=>'2022-01-20 02:21:08'
'version'=>'2.4.7 dev',
'form'=>'2022-01-27 17:20:14'
);

View File

@ -4,6 +4,12 @@ require __DIR__ . '/application/function.php';
require APP_ROOT . '/application/class.upload.php';
require APP_ROOT . '/application/WaterMask.php';
// 检查登录
if ($config['mustLogin']) {
checkLogin();
exit;
}
// 黑/白IP名单上传
if ($config['check_ip']) {
if (checkIP(null, $config['check_ip_list'], $config['check_ip_model'])) {
@ -98,11 +104,16 @@ if ($handle->uploaded) {
// 上传成功后返回json数据
$imageUrl = $config['imgurl'] . config_path() . $handle->file_dst_name;
// 判断PHP版本启用删除
if (PHP_VERSION >= '7') {
$delUrl = $config['domain'] . '/application/del.php?hash=' . urlHash(config_path() . $handle->file_dst_name, 0);
// 关闭上传后显示加密删除链接
if ($config['show_user_hash_del']) {
// 判断PHP版本启用删除
if (PHP_VERSION >= '7') {
$delUrl = $config['domain'] . '/application/del.php?hash=' . urlHash(config_path() . $handle->file_dst_name, 0);
} else {
$delUrl = "Sever PHP version lower 7.0";
}
} else {
$delUrl = "Sever PHP version lower 7.0 and does't support deletion";
$delUrl = "Admin closed delete";
}
$reJson = array(
@ -119,7 +130,6 @@ if ($handle->uploaded) {
"result" => "failed",
"code" => 400,
"message" => $handle->error,
//"log" => $handle->log,
);
unset($handle);
header('Content-Type:application/json; charset=utf-8');

View File

@ -1,4 +1,4 @@
<FilesMatch "\.(?i:php|php3|php4|php5)">
<Files ~ ".php">
Order allow,deny
Deny from all
</FilesMatch>
</Files>

162
index.php
View File

@ -1,85 +1,90 @@
<?php
require_once 'application/header.php';
// 公告
if (isset($config['tips'])) {
echo '<ul style="list-style: none;margin:1px 1px 30px 1px;"><li class="icon icon-bullhorn text-muted"> ' . $config['tips'] . '</li></ul>';
}
if (!empty($config['tips'])) echo '
<div class="marquee">
<div class="wrap">
<div id="marquee2">
' . $config['tips'] . '
</div>
</div>
</div>
';
// 检查登录
mustLogin();
?>
<div class="container">
<div class="col-md-12">
<div id='upShowID' class="uploader col-md-10 col-md-offset-1" data-ride="uploader" data-url="file.php">
<div class="uploader-message text-center">
<div class="content"></div>
<button type="button" class="close">×</button>
</div>
<div class="uploader-files file-list file-list-lg" data-drag-placeholder="Ctrl+V粘贴/选择文件/将图片直接拖拽至此处"></div>
<div class="uploader-actions">
<div class="uploader-status pull-right text-muted"></div>
<button type="button" class="btn btn-link uploader-btn-browse">
<i class="icon icon-plus"></i>选择文件</button>
<button type="button" class="btn btn-link uploader-btn-start">
<i class="icon icon-cloud-upload"></i>开始上传</button>
<button type="button" class="btn btn-link uploader-btn-stop">
<i class="icon icon-pause"></i>暂停上传</button>
</div>
<div class="col-md-12">
<div id='upShowID' class="uploader col-md-10 col-md-offset-1" data-ride="uploader" data-url="file.php">
<div class="uploader-message text-center">
<div class="content"></div>
<button type="button" class="close">x</button>
</div>
<div class="col-md-10 col-md-offset-1 col-xs-12">
<ul class="nav nav-tabs">
<li <?php if($config['first_show']==1){echo 'class="active"';}?>>
<a href="#" data-target="#tab2Content1" data-toggle="tab"><i class="icon icon-link"></i> 直链</a>
</li>
<li <?php if($config['first_show']==2){echo 'class="active"';}?>>
<a href="#" data-target="#tab2Content2" data-toggle="tab"><i class="icon icon-chat"></i> 论坛代码</a>
</li>
<li <?php if($config['first_show']==3){echo 'class="active"';}?>>
<a href="#" data-target="#tab2Content3" data-toggle="tab"><i class="icon icon-code"></i> MarkDown</a>
</li>
<li <?php if($config['first_show']==4){echo 'class="active"';}?>>
<a href="#" data-target="#tab2Content4" data-toggle="tab"><i class="icon icon-html5"></i> HTML</a>
</li>
<li <?php if($config['first_show']==5){echo 'class="active"';}?>>
<a href="#" data-target="#tab2Content5" data-toggle="tab"><i class="icon icon-trash"></i> 删除</a>
</li>
</ul>
<div class="tab-content" style="text-align:right">
<div class="tab-pane fade <?php if($config['first_show']==1){echo 'active in';}?>" id="tab2Content1">
<textarea class="form-control" rows="5" id="links" readonly></textarea>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btnLinks" class="btn copyBtn1" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
<div class="tab-pane fade <?php if($config['first_show']==2){echo 'active in';}?>" id="tab2Content2">
<textarea class="form-control" rows="5" id="bbscode" readonly></textarea>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btnBbscode" class="btn copyBtn2" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
<div class="tab-pane fade <?php if($config['first_show']==3){echo 'active in';}?>" id="tab2Content3">
<textarea class="form-control" rows="5" id="markdown" readonly></textarea>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btnMarkDown" class="btn copyBtn3" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
<div class="tab-pane fade <?php if($config['first_show']==4){echo 'active in';}?>" id="tab2Content4">
<textarea class="form-control" rows="5" id="html" readonly></textarea>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btnHtml" class="btn copyBtn4" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
<div class="tab-pane fade <?php if($config['first_show']==5){echo 'active in';}?>" id="tab2Content5">
<pre><textarea class="form-control" rows="5" id="del" readonly></textarea></pre>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btndel" class="btn copyBtn5" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
<div class="uploader-files file-list file-list-lg" data-drag-placeholder="Ctrl+V粘贴/选择文件/将图片直接拖拽至此处" style="min-height: 160px; border-style: dashed;"></div>
<div class="uploader-actions">
<div class="uploader-status pull-right text-muted"></div>
<button type="button" class="btn btn-link uploader-btn-browse">
<i class="icon icon-plus"></i>选择文件</button>
<button type="button" class="btn btn-link uploader-btn-start">
<i class="icon icon-cloud-upload"></i>开始上传</button>
<button type="button" class="btn btn-link uploader-btn-stop">
<i class="icon icon-pause"></i>暂停上传</button>
</div>
</div>
<div class="col-md-10 col-md-offset-1">
<ul class="nav nav-tabs">
<li <?php if ($config['upload_first_show'] == 1) echo 'class="active"'; ?>>
<a href="#" data-target="#tab2Content1" data-toggle="tab"><i class="icon icon-link"></i> 直链</a>
</li>
<li <?php if ($config['upload_first_show'] == 2) echo 'class="active"'; ?>>
<a href="#" data-target="#tab2Content2" data-toggle="tab"><i class="icon icon-chat"></i> 论坛代码</a>
</li>
<li <?php if ($config['upload_first_show'] == 3) echo 'class="active"'; ?>>
<a href="#" data-target="#tab2Content3" data-toggle="tab"><i class="icon icon-code"></i> MarkDown</a>
</li>
<li <?php if ($config['upload_first_show'] == 4) echo 'class="active"'; ?>>
<a href="#" data-target="#tab2Content4" data-toggle="tab"><i class="icon icon-html5"></i> HTML</a>
</li>
<li <?php if ($config['upload_first_show'] == 5) echo 'class="active"'; ?>>
<a href="#" data-target="#tab2Content5" data-toggle="tab"><i class="icon icon-trash"></i> 删除</a>
</li>
</ul>
<div class="tab-content" style="text-align:right;">
<div class="tab-pane fade <?php if ($config['upload_first_show'] == 1) echo 'active in'; ?>" id="tab2Content1">
<textarea class="form-control" rows="5" id="links" readonly></textarea>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btnLinks" class="btn copyBtn1" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
<div class="tab-pane fade <?php if ($config['upload_first_show'] == 2) echo 'active in'; ?>" id="tab2Content2">
<textarea class="form-control" rows="5" id="bbscode" readonly></textarea>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btnBbscode" class="btn copyBtn2" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
<div class="tab-pane fade <?php if ($config['upload_first_show'] == 3) echo 'active in'; ?>" id="tab2Content3">
<textarea class="form-control" rows="5" id="markdown" readonly></textarea>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btnMarkDown" class="btn copyBtn3" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
<div class="tab-pane fade <?php if ($config['upload_first_show'] == 4) echo 'active in'; ?>" id="tab2Content4">
<textarea class="form-control" rows="5" id="html" readonly></textarea>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btnHtml" class="btn copyBtn4" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
<div class="tab-pane fade <?php if ($config['upload_first_show'] == 5) echo 'active in'; ?>" id="tab2Content5">
<pre><textarea class="form-control" rows="5" id="del" readonly></textarea></pre>
<button class="btn" style="margin-top:10px;" onclick="location.reload()"><i class="icon icon-undo"></i> 刷新</button>
<button id="btndel" class="btn copyBtn5" data-loading-text="已经复制链接..." style="margin-top:10px;"><i class="icon icon-copy"></i> 复制</button>
</div>
</div>
</div>
</div>
</div>
</table>
<link href="<?php static_cdn(); ?>/public/static/marquee/marquee.css" rel="stylesheet">
<link href="<?php static_cdn(); ?>/public/static/zui/lib/uploader/zui.uploader.min.css" rel="stylesheet">
<script src="<?php static_cdn(); ?>/public/static/zui/lib/uploader/zui.uploader.min.js"></script>
<script src="<?php static_cdn(); ?>/public/static/marquee/marquee.min.js"></script>
<script src="<?php static_cdn(); ?>/public/static/EasyImage.js"></script>
<script src="<?php static_cdn(); ?>/public/static/zui/lib/uploader/zui.uploader.min.js?v1.10.0"></script>
<script>
$('#upShowID').uploader({
// 自动上传
@ -137,10 +142,27 @@ mustLogin();
} else {
return '上传失败,服务器返回错误:' + obj.message;
}
}
});
// 公告
(function() {
new Marquee({
// 要滚动的元素
elem: document.getElementById("marquee2"),
// 每次滚动的步长(px)默认0
step: 30,
// 滚动效果执行时间(ms)默认400
stepInterval: 400,
// 每次滚动间隔时间(ms)默认3000
interval: 3000,
// 滚动方向up、down、left、right默认为"left" 当前只支持上下
dir: 'up',
// 是否自动滚动默认为true
autoPlay: true,
// 是否在鼠标滑过低级元素时暂停滚动默认为true
hoverPause: true
});
})();
</script>
<?php
require_once APP_ROOT . '/application/footer.php';
checkEnv($config['checkEnv']); // 环境检测

View File

@ -52,6 +52,6 @@ if (isset($_POST['del_extra_files'])) {
echo '
<script>
window.alert("安装成功,即将为您跳转到登陆界面!");
location.href="../application/login.php";
location.href="../admin/index.php";
</script>
';

View File

@ -177,8 +177,8 @@ function checkPASS($name)
<i class="icon icon-qrcode"></i>二维码 </a>
</div>
<?php echo 'Copyright © 2018-' . date('Y'); ?>
<a href="https://img.545141.com/" target="_blank">EasyImage</a> By
<a href="https://www.545141.com/902.html" target="_blank">Icret</a> Version:<a href="https://github.com/icret/EasyImages2.0" target="_blank"><?php echo $config['version']; ?></a>
<a href="https://png.cm/" target="_blank">EasyImage</a> By
<a href="https://blog.png.cm/902.html" target="_blank">Icret</a> Version:<a href="https://github.com/icret/EasyImages2.0" target="_blank"><?php echo $config['version']; ?></a>
</footer>
</body>

View File

@ -175,8 +175,8 @@ if ($state !== 'checked') {
<i class="icon icon-qrcode"></i>二维码 </a>
</div>
<?php echo 'Copyright © 2018-' . date('Y'); ?>
<a href="https://img.545141.com/" target="_blank">EasyImage</a> By
<a href="https://www.545141.com/902.html" target="_blank">Icret</a> Version:<a href="https://github.com/icret/EasyImages2.0" target="_blank"><?php echo $config['version']; ?></a>
<a href="https://png.cm/" target="_blank">EasyImage</a> By
<a href="https://blog.png.cm/902.html" target="_blank">Icret</a> Version:<a href="https://github.com/icret/EasyImages2.0" target="_blank"><?php echo $config['version']; ?></a>
</footer>
</body>

4
public/.htaccess Executable file
View File

@ -0,0 +1,4 @@
<Files ~ ".php">
Order allow,deny
Deny from all
</Files>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
public/images/EasyImage2.0.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

BIN
public/images/alipay.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
public/images/wechat.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -229,4 +229,4 @@ var _hmt = _hmt || [];
hm.src = "https://hm.baidu.com/hm.js?5320b69f4f1caa9328dfada73c8e6a75";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
})();

File diff suppressed because one or more lines are too long

13
public/static/instantclick-3.1.0.min.js vendored Executable file
View File

@ -0,0 +1,13 @@
/* InstantClick 3.1.0 | (C) 2014 Alexandre Dieulot | http://instantclick.io/license */
var InstantClick=function(d,e){function w(a){var b=a.indexOf("#");return 0>b?a:a.substr(0,b)}function z(a){for(;a&&"A"!=a.nodeName;)a=a.parentNode;return a}function A(a){var b=e.protocol+"//"+e.host;if(!(b=a.target||a.hasAttribute("download")||0!=a.href.indexOf(b+"/")||-1<a.href.indexOf("#")&&w(a.href)==k)){if(J){a:{do{if(!a.hasAttribute)break;if(a.hasAttribute("data-no-instant"))break;if(a.hasAttribute("data-instant")){a=!0;break a}}while(a=a.parentNode);a=!1}a=!a}else a:{do{if(!a.hasAttribute)break;
if(a.hasAttribute("data-instant"))break;if(a.hasAttribute("data-no-instant")){a=!0;break a}}while(a=a.parentNode);a=!1}b=a}return b?!1:!0}function t(a,b,c,g){for(var d=!1,e=0;e<B[a].length;e++)if("receive"==a){var f=B[a][e](b,c,g);f&&("body"in f&&(c=f.body),"title"in f&&(g=f.title),d=f)}else B[a][e](b,c,g);return d}function K(a,b,c,g){d.documentElement.replaceChild(b,d.body);if(c){history.pushState(null,null,c);b=c.indexOf("#");b=-1<b&&d.getElementById(c.substr(b+1));g=0;if(b)for(;b.offsetParent;)g+=
b.offsetTop,b=b.offsetParent;scrollTo(0,g);k=w(c)}else scrollTo(0,g);d.title=S&&d.title==a?a+String.fromCharCode(160):a;L();C.done();t("change",!1);a=d.createEvent("HTMLEvents");a.initEvent("instantclick:newpage",!0,!0);dispatchEvent(a)}function M(a){G>+new Date-500||(a=z(a.target))&&A(a)&&x(a.href)}function N(a){G>+new Date-500||(a=z(a.target))&&A(a)&&(a.addEventListener("mouseout",T),H?(O=a.href,l=setTimeout(x,H)):x(a.href))}function U(a){G=+new Date;(a=z(a.target))&&A(a)&&(D?a.removeEventListener("mousedown",
M):a.removeEventListener("mouseover",N),x(a.href))}function V(a){var b=z(a.target);!b||!A(b)||1<a.which||a.metaKey||a.ctrlKey||(a.preventDefault(),P(b.href))}function T(){l?(clearTimeout(l),l=!1):v&&!m&&(p.abort(),m=v=!1)}function W(){if(!(4>p.readyState)&&0!=p.status){q.ready=+new Date-q.start;if(p.getResponseHeader("Content-Type").match(/\/(x|ht|xht)ml/)){var a=d.implementation.createHTMLDocument("");a.documentElement.innerHTML=p.responseText.replace(/<noscript[\s\S]+<\/noscript>/gi,"");y=a.title;
u=a.body;var b=t("receive",r,u,y);b&&("body"in b&&(u=b.body),"title"in b&&(y=b.title));b=w(r);h[b]={body:u,title:y,scrollY:b in h?h[b].scrollY:0};for(var a=a.head.children,b=0,c,g=a.length-1;0<=g;g--)if(c=a[g],c.hasAttribute("data-instant-track")){c=c.getAttribute("href")||c.getAttribute("src")||c.innerHTML;for(var e=E.length-1;0<=e;e--)E[e]==c&&b++}b!=E.length&&(F=!0)}else F=!0;m&&(m=!1,P(r))}}function L(a){d.body.addEventListener("touchstart",U,!0);D?d.body.addEventListener("mousedown",M,!0):d.body.addEventListener("mouseover",
N,!0);d.body.addEventListener("click",V,!0);if(!a){a=d.body.getElementsByTagName("script");var b,c,g,e;i=0;for(j=a.length;i<j;i++)b=a[i],b.hasAttribute("data-no-instant")||(c=d.createElement("script"),b.src&&(c.src=b.src),b.innerHTML&&(c.innerHTML=b.innerHTML),g=b.parentNode,e=b.nextSibling,g.removeChild(b),g.insertBefore(c,e))}}function x(a){!D&&"display"in q&&100>+new Date-(q.start+q.display)||(l&&(clearTimeout(l),l=!1),a||(a=O),v&&(a==r||m))||(v=!0,m=!1,r=a,F=u=!1,q={start:+new Date},t("fetch"),
p.open("GET",a),p.send())}function P(a){"display"in q||(q.display=+new Date-q.start);l||!v?l&&r&&r!=a?e.href=a:(x(a),C.start(0,!0),t("wait"),m=!0):m?e.href=a:F?e.href=r:u?(h[k].scrollY=pageYOffset,m=v=!1,K(y,u,r)):(C.start(0,!0),t("wait"),m=!0)}var I=navigator.userAgent,S=-1<I.indexOf(" CriOS/"),Q="createTouch"in d,k,O,l,G,h={},p,r=!1,y=!1,F=!1,u=!1,q={},v=!1,m=!1,E=[],J,D,H,B={fetch:[],receive:[],wait:[],change:[]},C=function(){function a(a,e){n=a;d.getElementById(f.id)&&d.body.removeChild(f);f.style.opacity=
"1";d.getElementById(f.id)&&d.body.removeChild(f);g();e&&setTimeout(b,0);clearTimeout(l);l=setTimeout(c,500)}function b(){n=10;g()}function c(){n+=1+2*Math.random();98<=n?n=98:l=setTimeout(c,500);g()}function g(){h.style[k]="translate("+n+"%)";d.getElementById(f.id)||d.body.appendChild(f)}function e(){d.getElementById(f.id)?(clearTimeout(l),n=100,g(),f.style.opacity="0"):(a(100==n?0:n),setTimeout(e,0))}function m(){f.style.left=pageXOffset+"px";f.style.width=innerWidth+"px";f.style.top=pageYOffset+
"px";var a="orientation"in window&&90==Math.abs(orientation);f.style[k]="scaleY("+innerWidth/screen[a?"height":"width"]*2+")"}var f,h,k,n,l;return{init:function(){f=d.createElement("div");f.id="instantclick";h=d.createElement("div");h.id="instantclick-bar";h.className="instantclick-bar";f.appendChild(h);var a=["Webkit","Moz","O"];k="transform";if(!(k in h.style))for(var b=0;3>b;b++)a[b]+"Transform"in h.style&&(k=a[b]+"Transform");var c="transition";if(!(c in h.style))for(b=0;3>b;b++)a[b]+"Transition"in
h.style&&(c="-"+a[b].toLowerCase()+"-"+c);a=d.createElement("style");a.innerHTML="#instantclick{position:"+(Q?"absolute":"fixed")+";top:0;left:0;width:100%;pointer-events:none;z-index:2147483647;"+c+":opacity .25s .1s}.instantclick-bar{background:#29d;width:100%;margin-left:-100%;height:2px;"+c+":all .25s}";d.head.appendChild(a);Q&&(m(),addEventListener("resize",m),addEventListener("scroll",m))},start:a,done:e}}(),R="pushState"in history&&(!I.match("Android")||I.match("Chrome/"))&&"file:"!=e.protocol;
return{supported:R,init:function(){if(!k)if(R){for(var a=arguments.length-1;0<=a;a--){var b=arguments[a];!0===b?J=!0:"mousedown"==b?D=!0:"number"==typeof b&&(H=b)}k=w(e.href);h[k]={body:d.body,title:d.title,scrollY:pageYOffset};for(var b=d.head.children,c,a=b.length-1;0<=a;a--)c=b[a],c.hasAttribute("data-instant-track")&&(c=c.getAttribute("href")||c.getAttribute("src")||c.innerHTML,E.push(c));p=new XMLHttpRequest;p.addEventListener("readystatechange",W);L(!0);C.init();t("change",!0);addEventListener("popstate",
function(){var a=w(e.href);a!=k&&(a in h?(h[k].scrollY=pageYOffset,k=a,K(h[a].title,h[a].body,!1,h[a].scrollY)):e.href=e.href)})}else t("change",!0)},on:function(a,b){B[a].push(b)}}}(document,location);

View File

@ -0,0 +1,36 @@
/**
* Marquee by javascript
* @authors richard chen
* @date 2014-06-12
* @version 1.0
* @editor Icret for EasyImage2.0
* @date 2022-1-26 03:36:32
*/
.marquee {
width: 350px;
height: 30px;
margin-bottom: 10px;
overflow: hidden;
line-height: 30px;
}
.marquee .wrap {
width: 350px;
height: 30px;
float: left;
overflow: hidden;
position: relative;
}
.marquee #marquee2 {
position: absolute;
top: 0;
left: 0;
}
.marquee #marquee2 a {
display: block;
font-size: 14px;
overflow: hidden;
color: #666;
}

4
public/static/marquee/marquee.min.js vendored Executable file
View File

@ -0,0 +1,4 @@
/**
* https://github.com/richardchen85/Marquee
*/
var Marquee=function(t){this.elem=null,this.step=0,this.stepInterval=400,this.interval=3e3,this.dir="left",this.autoPlay=!0,this.hoverPause=!0,this.pausing=!1,this.timerStep=null,this.timer=null,this.init(t)};Marquee.prototype={constructor:Marquee,init:function(t){return this.extend(t,this),this.elem?(this.elem.innerHTML+=this.elem.innerHTML,this.loadStyle(),this.hoverPause&&this.bindEvents(),this.autoPlay&&this.startScroll(),void 0):!1},loadStyle:function(){var t=this.elem.children;("left"==this.dir||"right"==this.dir)&&(this.elem.style.width=t[0].offsetWidth*t.length+"px"),"right"==this.dir&&0==this.elem.offsetLeft&&(this.elem.style.left=-this.elem.offsetWidth/2+"px"),"left"==this.dir&&this.elem.offsetLeft==-this.elem.offsetWidth/2&&(this.elem.style.left=0),"down"==this.dir&&0==this.elem.offsetTop&&(this.elem.style.top=-this.elem.offsetHeight/2+"px"),"up"==this.dir&&this.elem.offsetTop==-this.elem.offsetHeight/2&&(this.elem.style.top=0)},bindEvents:function(){var t=this;this.bind(this.elem.parentNode,"mouseover",function(){t.stop(),t.pausing=!0}),this.bind(this.elem.parentNode,"mouseout",function(){t.pausing=!1,t.autoPlay&&t.startScroll()})},stop:function(){clearInterval(this.timer)},doScroll:function(){var t,e,i,s,h,l=this;if("left"==this.dir||"right"==this.dir?(t="left",e="offsetLeft",h=this.elem.offsetWidth/2):(t="top",e="offsetTop",h=this.elem.offsetHeight/2),s="left"==this.dir||"up"==this.dir?-this.step:this.step,0==this.stepInterval)h-Math.abs(this.elem[e])<Math.abs(s)&&(s=s/Math.abs(s)*(h-Math.abs(this.elem[e]))),i=this.elem[e]+s,i=this.fixTarget(s,this.elem[e]+s,h),this.elem.style[t]=i+"px";else{if(null!=this.timerStep)return;this.stop();var n=30/l.stepInterval*s;n=0>n?Math.ceil(n):Math.floor(n),this.timerStep=setInterval(function(){n=n>0?Math.min(n,s):Math.max(n,s),i=l.fixTarget(n,l.elem[e]+n,h),l.elem.style[t]=i+"px",s-=n,0==s&&(clearInterval(l.timerStep),l.timerStep=null,l.autoPlay&&!l.pausing&&l.startScroll())},30)}},fixTarget:function(t,e,i){return 0>t&&Math.abs(e)>=i?0:t>0&&e>=0?-i:e},changeDir:function(t){this.dir=t,this.loadStyle(),this.doScroll()},startScroll:function(){var t=this;this.timer=setInterval(function(){t.doScroll()},t.interval)},extend:function(t,e){for(name in t)e[name]=t[name]},bind:function(t,e,i){t.addEventListener?t.addEventListener(e,i,!1):t.attachEvent?t.attachEvent("on"+e,i):t["on"+e]=hanlder}};

File diff suppressed because one or more lines are too long