parent
cbedb0e32f
commit
fe1779213d
384
api/api-web.php
384
api/api-web.php
|
@ -1,192 +1,192 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* API 页面管理
|
* API 页面管理
|
||||||
*/
|
*/
|
||||||
require_once '../libs/header.php';
|
require_once '../libs/header.php';
|
||||||
require_once APP_ROOT . '/config/api_key.php';
|
require_once APP_ROOT . '/config/api_key.php';
|
||||||
require_once APP_ROOT . '/api/libs//apiFunction.php';
|
require_once APP_ROOT . '/api/libs//apiFunction.php';
|
||||||
|
|
||||||
// 检测登录
|
// 检测登录
|
||||||
if (!is_online()) {
|
if (!is_online()) {
|
||||||
checkLogin();
|
checkLogin();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找用户ID或者Token
|
// 查找用户ID或者Token
|
||||||
if (isset($_POST['radio'])) {
|
if (isset($_POST['radio'])) {
|
||||||
if ($_POST['radio'] == 'id') {
|
if ($_POST['radio'] == 'id') {
|
||||||
$radio_value = '用户token:' . getIDToken($_POST['radio-value']);
|
$radio_value = '用户token:' . getIDToken($_POST['radio-value']);
|
||||||
} elseif ($_POST['radio'] == 'token') {
|
} elseif ($_POST['radio'] == 'token') {
|
||||||
$radio_value = '用户ID:' . getID($_POST['radio-value']);
|
$radio_value = '用户ID:' . getID($_POST['radio-value']);
|
||||||
} else {
|
} else {
|
||||||
$radio_value = null;
|
$radio_value = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 删除非空目录
|
// 删除非空目录
|
||||||
if (isset($_POST['delDir'])) {
|
if (isset($_POST['delDir'])) {
|
||||||
$delDir = APP_ROOT . $config['path'] . $_POST['delDir'];
|
$delDir = APP_ROOT . $config['path'] . $_POST['delDir'];
|
||||||
if (deldir($delDir)) {
|
if (deldir($delDir)) {
|
||||||
echo '
|
echo '
|
||||||
<script> new $.zui.Messager("删除成功!", {type: "success" // 定义颜色主题
|
<script> new $.zui.Messager("删除成功!", {type: "success" // 定义颜色主题
|
||||||
}).show();</script>';
|
}).show();</script>';
|
||||||
header("refresh:1;"); // 1s后刷新当前页面
|
header("refresh:1;"); // 1s后刷新当前页面
|
||||||
} else {
|
} else {
|
||||||
echo '
|
echo '
|
||||||
<script> new $.zui.Messager("删除失败!", {type: "danger" // 定义颜色主题
|
<script> new $.zui.Messager("删除失败!", {type: "danger" // 定义颜色主题
|
||||||
}).show();</script>';
|
}).show();</script>';
|
||||||
header("refresh:1;"); // 1s后刷新当前页面
|
header("refresh:1;"); // 1s后刷新当前页面
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
</div class="row">
|
</div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="alert alert-primary">
|
<div class="alert alert-primary">
|
||||||
<h3 style="text-align:center">EasyImage2.0 快捷操作中心</h2>
|
<h3 style="text-align:center">EasyImage2.0 快捷操作中心</h2>
|
||||||
<hr />
|
<hr />
|
||||||
<h5>此页面为常用快捷操作,目录保存以 年/月/日/ 递进,非必要请勿修改!否则会导致部分操作不可用。</h5>
|
<h5>此页面为常用快捷操作,目录保存以 年/月/日/ 递进,非必要请勿修改!否则会导致部分操作不可用。</h5>
|
||||||
<h5>当前软件环境信息:PHP版本:<?php echo phpversion(); ?>;PHP上传最大值:<?php echo ini_get('upload_max_filesize'); ?>;POST上传最大值:<?php echo ini_get('post_max_size'); ?>;</h5>
|
<h5>当前软件环境信息:PHP版本:<?php echo phpversion(); ?>;PHP上传最大值:<?php echo ini_get('upload_max_filesize'); ?>;POST上传最大值:<?php echo ini_get('post_max_size'); ?>;</h5>
|
||||||
<h5><?php
|
<h5><?php
|
||||||
$yesterday = date("Y/m/d/", strtotime("-1 day"));
|
$yesterday = date("Y/m/d/", strtotime("-1 day"));
|
||||||
echo '今日上传数量:' . getFileNumber(APP_ROOT . config_path()) . ' 昨日上传数量:' . getFileNumber(APP_ROOT . $config['path'] . $yesterday) . ' 占用空间:' . getDistUsed(disk_total_space(__DIR__) - disk_free_space(__DIR__)) . ' 剩余空间:' . getDistUsed(disk_free_space(__DIR__)); ?>
|
echo '今日上传数量:' . getFileNumber(APP_ROOT . config_path()) . ' 昨日上传数量:' . getFileNumber(APP_ROOT . $config['path'] . $yesterday) . ' 占用空间:' . getDistUsed(disk_total_space(__DIR__) - disk_free_space(__DIR__)) . ' 剩余空间:' . getDistUsed(disk_free_space(__DIR__)); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<form class="form-condensed" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
|
<form class="form-condensed" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
|
||||||
<label for="exampleInputMoney1">
|
<label for="exampleInputMoney1">
|
||||||
新Token需按要求填入
|
新Token需按要求填入
|
||||||
<code>
|
<code>
|
||||||
/config/api_key.php
|
/config/api_key.php
|
||||||
</code>
|
</code>
|
||||||
才生效
|
才生效
|
||||||
</label>
|
</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-addon">
|
<span class="input-group-addon">
|
||||||
New Token
|
New Token
|
||||||
</span>
|
</span>
|
||||||
<input type="text" class="form-control" id="exampleInputMoney1" value="<?php echo privateToken(); ?>">
|
<input type="text" class="form-control" id="exampleInputMoney1" value="<?php echo privateToken(); ?>">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<form></form>
|
<form></form>
|
||||||
<form class="form-condensed" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
|
<form class="form-condensed" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="exampleInputAccount6">根据ID/Token查找用户信息</label>
|
<label for="exampleInputAccount6">根据ID/Token查找用户信息</label>
|
||||||
<input type="text" name="radio-value" id="exampleInputAccount6" class="form-control" placeholder="输入信息" value="<?php echo @$radio_value; ?>">
|
<input type="text" name="radio-value" id="exampleInputAccount6" class="form-control" placeholder="输入信息" value="<?php echo @$radio_value; ?>">
|
||||||
<div class="radio-primary"><input type="radio" name="radio" value="id" id="primaryradio1" checked="checked"><label for="primaryradio1">根据ID查找用户Token</label></div>
|
<div class="radio-primary"><input type="radio" name="radio" value="id" id="primaryradio1" checked="checked"><label for="primaryradio1">根据ID查找用户Token</label></div>
|
||||||
<div class="radio-primary"><input type="radio" name="radio" value="token" id="primaryradio2"><label for="primaryradio2">根据Token查找用户ID</label></div>
|
<div class="radio-primary"><input type="radio" name="radio" value="token" id="primaryradio2"><label for="primaryradio2">根据Token查找用户ID</label></div>
|
||||||
<button type="submit" class="btn btn-mini btn-primary">
|
<button type="submit" class="btn btn-mini btn-primary">
|
||||||
查找
|
查找
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div id="delimgurl"></div>
|
<div id="delimgurl"></div>
|
||||||
<div id="title"></div>
|
<div id="title"></div>
|
||||||
<form class="form-condensed" method="get" action="del.php" id="form" name="delForm" onSubmit="getStr();" target="_blank">
|
<form class="form-condensed" method="get" action="del.php" id="form" name="delForm" onSubmit="getStr();" target="_blank">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="del">
|
<label for="del">
|
||||||
删除图片
|
删除图片
|
||||||
</label>
|
</label>
|
||||||
<input type="url" name="url" class="form-control" id="del" placeholder="请输入图片链接" />
|
<input type="url" name="url" class="form-control" id="del" placeholder="请输入图片链接" />
|
||||||
</div>
|
</div>
|
||||||
<label>格式:<code>https://i1.100024.xyz/i/2021/05/04/10fn9ei.jpg</code></label>
|
<label>格式:<code>https://i1.100024.xyz/i/2021/05/04/10fn9ei.jpg</code></label>
|
||||||
<input type="submit" class="btn btn-mini btn-primary" value="删除" />
|
<input type="submit" class="btn btn-mini btn-primary" value="删除" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
|
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<form action="../libs/compressing.php" method="post" target="_blank">
|
<form action="../libs/compressing.php" method="post" target="_blank">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="exampleInputInviteCode1">压缩文件夹内图片(格式:2021/05/10/):</label>
|
<label for="exampleInputInviteCode1">压缩文件夹内图片(格式:2021/05/10/):</label>
|
||||||
<input type="text" class="form-control form-date" placeholder="" name="folder" value="<?php echo date('Y/m/d/'); ?>" readonly="">
|
<input type="text" class="form-control form-date" placeholder="" name="folder" value="<?php echo date('Y/m/d/'); ?>" readonly="">
|
||||||
</div>
|
</div>
|
||||||
<div class="radio">
|
<div class="radio">
|
||||||
<label>
|
<label>
|
||||||
<input type="radio" name="type" value="Imgcompress" checked="checked"> 使用本地压缩(默认上传已压缩,不需重复压缩)
|
<input type="radio" name="type" value="Imgcompress" checked="checked"> 使用本地压缩(默认上传已压缩,不需重复压缩)
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="radio">
|
<div class="radio">
|
||||||
<label>
|
<label>
|
||||||
<input type="radio" name="type" value="TinyImg"> 使用TinyImag压缩(需要申请key)
|
<input type="radio" name="type" value="TinyImg"> 使用TinyImag压缩(需要申请key)
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label>
|
<label>
|
||||||
* 如果页面长时间没有响应,表示正面正在压缩!
|
* 如果页面长时间没有响应,表示正面正在压缩!
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
两种压缩均为不可逆,并且非常占用硬件资源。
|
两种压缩均为不可逆,并且非常占用硬件资源。
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-mini btn-success">开始压缩</button>
|
<button type="submit" class="btn btn-mini btn-success">开始压缩</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<table class="table table-hover table-bordered table-condensed table-responsive">
|
<table class="table table-hover table-bordered table-condensed table-responsive">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>当前可用Token列表:</th>
|
<th>当前可用Token列表:</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php
|
<?php
|
||||||
foreach ($tokenList as $value) {
|
foreach ($tokenList as $value) {
|
||||||
echo '<tr><td>' . $value . '</td></tr>';
|
echo '<tr><td>' . $value . '</td></tr>';
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
|
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="exampleInputInviteCode1" style="color:red">删除所选日期文件夹(删除之后无法恢复!):</label>
|
<label for="exampleInputInviteCode1" style="color:red">删除所选日期文件夹(删除之后无法恢复!):</label>
|
||||||
<input type="text" class="form-control form-date" name="delDir" value="<?php echo date('Y/m/d/'); ?>" readonly="">
|
<input type="text" class="form-control form-date" name="delDir" value="<?php echo date('Y/m/d/'); ?>" readonly="">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="submit" class="btn btn-mini btn-danger" onClick="return confirm('确认要删除?\n* 删除文件夹后将无法恢复!');">删除目录</button>
|
<button type="submit" class="btn btn-mini btn-danger" onClick="return confirm('确认要删除?\n* 删除文件夹后将无法恢复!');">删除目录</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<link href="../public/static/zui/lib/datetimepicker/datetimepicker.min.css" rel="stylesheet">
|
<link href="../public/static/zui/lib/datetimepicker/datetimepicker.min.css" rel="stylesheet">
|
||||||
<script src="../public/static/zui/lib/datetimepicker/datetimepicker.min.js"></script>
|
<script src="../public/static/zui/lib/datetimepicker/datetimepicker.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
// 动态显示要删除的图片
|
// 动态显示要删除的图片
|
||||||
var oBtn = document.getElementById('del');
|
var oBtn = document.getElementById('del');
|
||||||
var oTi = document.getElementById('title');
|
var oTi = document.getElementById('title');
|
||||||
if ('oninput' in oBtn) {
|
if ('oninput' in oBtn) {
|
||||||
oBtn.addEventListener("input", getWord, false);
|
oBtn.addEventListener("input", getWord, false);
|
||||||
} else {
|
} else {
|
||||||
oBtn.onpropertychange = getWord;
|
oBtn.onpropertychange = getWord;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getWord() {
|
function getWord() {
|
||||||
var delimgurl = document.getElementById("delimgurl");
|
var delimgurl = document.getElementById("delimgurl");
|
||||||
delimgurl.innerHTML += '<img src="' + oBtn.value + '" width="200" class="img-rounded" /><br />';
|
delimgurl.innerHTML += '<img src="' + oBtn.value + '" width="200" class="img-rounded" /><br />';
|
||||||
}
|
}
|
||||||
|
|
||||||
// 仅选择日期
|
// 仅选择日期
|
||||||
$(".form-date").datetimepicker({
|
$(".form-date").datetimepicker({
|
||||||
weekStart: 1,
|
weekStart: 1,
|
||||||
todayBtn: 1,
|
todayBtn: 1,
|
||||||
autoclose: 1,
|
autoclose: 1,
|
||||||
todayHighlight: 1,
|
todayHighlight: 1,
|
||||||
startView: 2,
|
startView: 2,
|
||||||
minView: 2,
|
minView: 2,
|
||||||
forceParse: 0,
|
forceParse: 0,
|
||||||
format: "yyyy/mm/dd/"
|
format: "yyyy/mm/dd/"
|
||||||
});
|
});
|
||||||
|
|
||||||
// Title
|
// Title
|
||||||
document.title = "管理中心 - <?php echo $config['title']; ?>";
|
document.title = "管理中心 - <?php echo $config['title']; ?>";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<?php require_once APP_ROOT . '/libs/footer.php';
|
<?php require_once APP_ROOT . '/libs/footer.php';
|
||||||
|
|
|
@ -1,38 +1,38 @@
|
||||||
<?php
|
<?php
|
||||||
echo '<title> - EasyImage2.0</title>';
|
echo '<title> - EasyImage2.0</title>';
|
||||||
require_once '../../libs/function.php';
|
require_once '../../libs/function.php';
|
||||||
require_once APP_ROOT . '/libs/header.php';
|
require_once APP_ROOT . '/libs/header.php';
|
||||||
require_once APP_ROOT . '/config/api_key.php';
|
require_once APP_ROOT . '/config/api_key.php';
|
||||||
|
|
||||||
// 如果关闭Api上传并且没有登录的情况下关闭测试接口
|
// 如果关闭Api上传并且没有登录的情况下关闭测试接口
|
||||||
if (!$config['apiStatus'] and !is_online()) {
|
if (!$config['apiStatus'] and !is_online()) {
|
||||||
exit('<script>
|
exit('<script>
|
||||||
new $.zui.Messager("Api关闭,请登录", {type: "danger" // 定义颜色主题
|
new $.zui.Messager("Api关闭,请登录", {type: "danger" // 定义颜色主题
|
||||||
}).show();
|
}).show();
|
||||||
// 延时2s跳转
|
// 延时2s跳转
|
||||||
window.setTimeout("window.location=\'/../libs/login.php \'",2000);
|
window.setTimeout("window.location=\'/../libs/login.php \'",2000);
|
||||||
</script>');
|
</script>');
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
</div class="row">
|
</div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<h4>测试Token:<code><?php echo $tokenList['1']; ?></code></h4>
|
<h4>测试Token:<code><?php echo $tokenList['1']; ?></code></h4>
|
||||||
<form action="../index.php" method="post" enctype="multipart/form-data" class="form-inline" target="_blank">
|
<form action="../index.php" method="post" enctype="multipart/form-data" class="form-inline" target="_blank">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="file" name="image" accept="image/*" class="form-control" />
|
<input type="file" name="image" accept="image/*" class="form-control" />
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" name="token" placeholder="请输入Token" class="form-control" />
|
<input type="text" name="token" placeholder="请输入Token" class="form-control" />
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-primary">上传</button>
|
<button type="submit" class="btn btn-primary">上传</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
document.title = "API图片上传测试 - <?php echo $config['title']; ?>";
|
document.title = "API图片上传测试 - <?php echo $config['title']; ?>";
|
||||||
</script>
|
</script>
|
||||||
<?php require_once APP_ROOT . '/libs/footer.php';
|
<?php require_once APP_ROOT . '/libs/footer.php';
|
||||||
|
|
159
api/del.php
159
api/del.php
|
@ -1,80 +1,81 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除文件页面
|
* 删除文件页面
|
||||||
*/
|
*/
|
||||||
require_once '../libs/header.php';
|
require_once '../libs/header.php';
|
||||||
require_once APP_ROOT . '/libs/function.php';
|
require_once APP_ROOT . '/libs/function.php';
|
||||||
echo '<div class="col-md-4 col-md-offset-4">
|
echo '<div class="col-md-4 col-md-offset-4">
|
||||||
<div id="title" style="margin: 10px;"></div>
|
<div id="title" style="margin: 10px;"></div>
|
||||||
|
|
||||||
<form class="form-inline" method="get" action="' . $_SERVER['PHP_SELF'] . '" id="form" name="delForm" onSubmit="getStr();">
|
<form class="form-inline" method="get" action="' . $_SERVER['PHP_SELF'] . '" id="form" name="delForm" onSubmit="getStr();">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="exampleInputInviteCode3">删除图片-格式:</label>
|
<label for="exampleInputInviteCode3">删除图片-格式:</label>
|
||||||
<input type="text" class="form-control" id="exampleInputInviteCode3" name="url" placeholder="https://i1.100024.xyz/i/2021/05/04/10fn9ei.jpg">
|
<input type="text" class="form-control" id="exampleInputInviteCode3" name="url" placeholder="https://i1.100024.xyz/i/2021/05/04/10fn9ei.jpg">
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-danger">删除</button>
|
<button type="submit" class="btn btn-danger">删除</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
';
|
';
|
||||||
if (empty($_REQUEST)) {
|
if (empty($_REQUEST)) {
|
||||||
echo '
|
echo '
|
||||||
<script>
|
<script>
|
||||||
new $.zui.Messager("没有要删除的图片!", {type: "danger" // 定义颜色主题
|
new $.zui.Messager("没有要删除的图片!", {type: "danger" // 定义颜色主题
|
||||||
}).show();
|
}).show();
|
||||||
// 延时3.5s跳转
|
// 延时3.5s跳转
|
||||||
window.setTimeout("window.location=\'/../ \'",3500);
|
window.setTimeout("window.location=\'/../ \'",3500);
|
||||||
</script>
|
</script>
|
||||||
';
|
';
|
||||||
} elseif (isset($_GET['url'])) {
|
} elseif (isset($_GET['url'])) {
|
||||||
$img = $_GET['url'];
|
$img = $_GET['url'];
|
||||||
echo '
|
echo '
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<hr />
|
<hr />
|
||||||
<a href="' . $img . '" target="_blank"><img src="' . $img . '" alt="简单图床-EasyImage" class="img-thumbnail"></a>
|
<div style="text-align:center;"><span class="label">图片属性:'.@getimagesize($img)[0].'px X '.@getimagesize($img)[1].'px</span></div>
|
||||||
</div>';
|
<a href="' . $img . '" target="_blank"><img src="' . $img . '" alt="简单图床-EasyImage" class="img-thumbnail"></a>
|
||||||
}
|
</div>';
|
||||||
|
}
|
||||||
// 解密删除
|
|
||||||
if (isset($_GET['hash'])) {
|
// 解密删除
|
||||||
$delHash = $_GET['hash'];
|
if (isset($_GET['hash'])) {
|
||||||
$delHash = urlHash($delHash, 1);
|
$delHash = $_GET['hash'];
|
||||||
getDel($delHash, 'hash');
|
$delHash = urlHash($delHash, 1);
|
||||||
}
|
getDel($delHash, 'hash');
|
||||||
|
}
|
||||||
// 检查登录后再处理url删除请求
|
|
||||||
if (is_online()) {
|
// 检查登录后再处理url删除请求
|
||||||
if (isset($_GET['url'])) {
|
if (is_online()) {
|
||||||
getDel($_GET['url'], 'url');
|
if (isset($_GET['url'])) {
|
||||||
}
|
getDel($_GET['url'], 'url');
|
||||||
} else {
|
}
|
||||||
if (isset($_GET['url'])) {
|
} else {
|
||||||
echo '
|
if (isset($_GET['url'])) {
|
||||||
<script>
|
echo '
|
||||||
new $.zui.Messager("请登录后再删除", {type: "danger" // 定义颜色主题
|
<script>
|
||||||
}).show();
|
new $.zui.Messager("请登录后再删除", {type: "danger" // 定义颜色主题
|
||||||
// 延时2s跳转
|
}).show();
|
||||||
window.setTimeout("window.location=\'/../libs/login.php \'",2000);
|
// 延时2s跳转
|
||||||
</script>
|
window.setTimeout("window.location=\'/../libs/login.php \'",2000);
|
||||||
';
|
</script>
|
||||||
}
|
';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
require_once APP_ROOT . '/libs/footer.php';
|
|
||||||
?>
|
require_once APP_ROOT . '/libs/footer.php';
|
||||||
<script>
|
?>
|
||||||
// 修改网页标题
|
<script>
|
||||||
document.title = "删除图片 - <?php echo $config['title']; ?>";
|
// 修改网页标题
|
||||||
|
document.title = "删除图片 - <?php echo $config['title']; ?>";
|
||||||
var oBtn = document.getElementById('del');
|
|
||||||
var oTi = document.getElementById('title');
|
var oBtn = document.getElementById('del');
|
||||||
if ('oninput' in oBtn) {
|
var oTi = document.getElementById('title');
|
||||||
oBtn.addEventListener("input", getWord, false);
|
if ('oninput' in oBtn) {
|
||||||
} else {
|
oBtn.addEventListener("input", getWord, false);
|
||||||
oBtn.onpropertychange = getWord;
|
} else {
|
||||||
}
|
oBtn.onpropertychange = getWord;
|
||||||
|
}
|
||||||
function getWord() {
|
|
||||||
oTi.innerHTML = '<img src="' + oBtn.value + '" width="200" class="img-rounded" /><br />';
|
function getWord() {
|
||||||
}
|
oTi.innerHTML = '<img src="' + oBtn.value + '" width="200" class="img-rounded" /><br />';
|
||||||
|
}
|
||||||
</script>
|
</script>
|
|
@ -2,6 +2,7 @@
|
||||||
require_once __DIR__ . './../libs/function.php';
|
require_once __DIR__ . './../libs/function.php';
|
||||||
require_once APP_ROOT . '/api/libs/apiFunction.php';
|
require_once APP_ROOT . '/api/libs/apiFunction.php';
|
||||||
require_once APP_ROOT . '/libs/class.upload.php';
|
require_once APP_ROOT . '/libs/class.upload.php';
|
||||||
|
require_once APP_ROOT . '/libs/WaterMask.php';
|
||||||
require_once APP_ROOT . '/config/api_key.php';
|
require_once APP_ROOT . '/config/api_key.php';
|
||||||
|
|
||||||
// 检查是否开启api上传
|
// 检查是否开启api上传
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 此文件用来存放各种key
|
* 此文件用来存放各种key
|
||||||
* 2021-5-8 22:04:55
|
* 2021-5-8 22:04:55
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$Api_Key = [
|
$Api_Key = [
|
||||||
// 填写 TinyImag Key 申请地址:https://tinypng.com/developers
|
// 填写 TinyImag Key 申请地址:https://tinypng.com/developers
|
||||||
'TinyImag' => '****7pPVQc9P***4Jvd2zH*****'
|
'TinyImag' => '****7pPVQc9P***4Jvd2zH*****'
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Token list 请在此填写需要配置Token的用户 前边编号有助于识别上传者ID
|
* Token list 请在此填写需要配置Token的用户 前边编号有助于识别上传者ID
|
||||||
* 格式: ID(数字,需要从0开始,顺序添加)=> Token(注意后边',')
|
* 格式: ID(数字,需要从0开始,顺序添加)=> Token(注意后边',')
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$tokenList = array(
|
$tokenList = array(
|
||||||
0 => '8337effca0ddfcd9c5899f3509b23657',
|
0 => '8337effca0ddfcd9c5899f3509b23657',
|
||||||
1 => '1c17b11693cb5ec63859b091c5b9c1b2',
|
1 => '1c17b11693cb5ec63859b091c5b9c1b2',
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,320 +1,318 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EasyImage2.0 - 简单图床配置
|
* EasyImage2.0 - 简单图床配置
|
||||||
|
|
||||||
* @author icret
|
* @author icret
|
||||||
* @email lemonim@qq.com
|
* @email lemonim@qq.com
|
||||||
* @Github https://github.com/icret/easyImages2.0
|
* @Github https://github.com/icret/easyImages2.0
|
||||||
* QQ Group 623688684
|
* QQ Group 623688684
|
||||||
* @Last 2021-5-25 21:12:34
|
* @Last 2021-5-25 21:12:34
|
||||||
|
|
||||||
* 上传后请打开check.php先检查服务器配置,更改密码等操作
|
* 上传后请打开check.php先检查服务器配置,更改密码等操作
|
||||||
* 安装完毕后请删除README.md,check.php,LICENSE等非必要文件
|
* 安装完毕后请删除README.md,check.php,LICENSE等非必要文件
|
||||||
|
|
||||||
* 敬请注意:本程序为开源程序,你可以使用本程序在任何的商业、非商业项目或者网站中。但请你务必保留代码中相关信息(页面logo和页面上必要的链接可以清除)
|
* 敬请注意:本程序为开源程序,你可以使用本程序在任何的商业、非商业项目或者网站中。但请你务必保留代码中相关信息(页面logo和页面上必要的链接可以清除)
|
||||||
* 本人仅为程序开源创作,如非法网站与本人无关,请勿用于非法用途
|
* 本人仅为程序开源创作,如非法网站与本人无关,请勿用于非法用途
|
||||||
* 请为本人博客(www.545141.com)加上网址链接,谢谢支持。作为开发者你可以对相应的后台功能进行扩展(增删改相应代码),但请保留代码中相关来源信息(例如:本人博客,邮箱等)
|
* 请为本人博客(www.545141.com)加上网址链接,谢谢支持。作为开发者你可以对相应的后台功能进行扩展(增删改相应代码),但请保留代码中相关来源信息(例如:本人博客,邮箱等)
|
||||||
* 如果因安装问题或其他问题可以给我发邮件。
|
* 如果因安装问题或其他问题可以给我发邮件。
|
||||||
*
|
*
|
||||||
* 配置分为三大区块 - 1.基础配置 2.图床配置 3.tinyfilemanager管理配置
|
* 配置分为三大区块 - 1.基础配置 2.图床配置 3.tinyfilemanager管理配置
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*---------------基础配置-------------------*/
|
/*---------------基础配置-------------------*/
|
||||||
|
|
||||||
// 设置html为utf8
|
// 设置html为utf8
|
||||||
@header('Content-Type:text/html;charset=utf-8');
|
@header('Content-Type:text/html;charset=utf-8');
|
||||||
//将时区设置为中国·上海
|
//将时区设置为中国·上海
|
||||||
@ini_set('date.timezone', 'Asia/Shanghai');
|
@ini_set('date.timezone', 'Asia/Shanghai');
|
||||||
@date_default_timezone_set('Asia/Shanghai');
|
@date_default_timezone_set('Asia/Shanghai');
|
||||||
// 修改内存限制 根据服务器配置选择,低于128M容易出现上传失败,你懂得图片挺占用内存的
|
// 修改内存限制 根据服务器配置选择,低于128M容易出现上传失败,你懂得图片挺占用内存的
|
||||||
@ini_set('memory_limit', '512M');
|
@ini_set('memory_limit', '512M');
|
||||||
// 定义根目录
|
// 定义根目录
|
||||||
@define('APP_ROOT', str_replace('\\', '/', realpath(dirname(__FILE__) . '/../')));
|
@define('APP_ROOT', str_replace('\\', '/', realpath(dirname(__FILE__) . '/../')));
|
||||||
|
|
||||||
|
|
||||||
/*---------------图床配置-------------------*/
|
/*---------------图床配置-------------------*/
|
||||||
|
|
||||||
$config = array(
|
$config = array(
|
||||||
// 网站标题
|
// 网站标题
|
||||||
'title' => '简单图床 - EasyImage',
|
'title' => '简单图床 - EasyImage',
|
||||||
// 网站关键字
|
// 网站关键字
|
||||||
'keywords' => '简单图床,easyimage,无数据库图床,PHP多图长传程序,自适应页面,HTML5,markdown,bbscode,一键复制',
|
'keywords' => '简单图床,easyimage,无数据库图床,PHP多图长传程序,自适应页面,HTML5,markdown,bbscode,一键复制',
|
||||||
// 网站描述
|
// 网站描述
|
||||||
'description' => '简单图床EasyImage是一款支持多文件上传的无数据库图床,可以完美替代PHP多图上传程序,最新html5自适应页面兼容手机电脑,上传后返回图片直链,markdown图片,论坛贴图bbscode链接,简单方便支持一键复制,支持多域名,api上传。',
|
'description' => '简单图床EasyImage是一款支持多文件上传的无数据库图床,可以完美替代PHP多图上传程序,最新html5自适应页面兼容手机电脑,上传后返回图片直链,markdown图片,论坛贴图bbscode链接,简单方便支持一键复制,支持多域名,api上传。',
|
||||||
// 网站公告
|
// 网站公告
|
||||||
'tips' => '本站仅做演示用,不定时清理图片,单文件≤5M,每次上传≤30张',
|
'tips' => '本站仅做演示用,不定时清理图片,单文件≤5M,每次上传≤30张',
|
||||||
/**
|
/**
|
||||||
* 网站域名与图片链接域名可以不同,比如A域名上传,可以返回B域名图片链接,A、B需绑定到同一空间下
|
* 网站域名与图片链接域名可以不同,比如A域名上传,可以返回B域名图片链接,A、B需绑定到同一空间下
|
||||||
* 如果不变的话,下边2个填写成一样的!
|
* 如果不变的话,下边2个填写成一样的!
|
||||||
*/
|
*/
|
||||||
// 网站域名,末尾不加"/"
|
// 网站域名,末尾不加"/"
|
||||||
'domain' => 'http://192.168.1.15',
|
'domain' => 'http://192.168.2.100',
|
||||||
// 图片链接域名,末尾不加"/"
|
// 图片链接域名,末尾不加"/"
|
||||||
'imgurl' => 'http://192.168.1.15',
|
'imgurl' => 'http://192.168.2.100',
|
||||||
/**
|
/**
|
||||||
* 存储路径 前后要加"/"
|
* 存储路径 前后要加"/"
|
||||||
* 可根据Apache/Nginx配置安全,参考:https://www.545141.com/981.html 或 README.md
|
* 可根据Apache/Nginx配置安全,参考:https://www.545141.com/981.html 或 README.md
|
||||||
*/
|
*/
|
||||||
'path' => '/i/',
|
'path' => '/i/',
|
||||||
// 最大上传限制 默认为5M 请使用工具转换Mb http://www.bejson.com/convert/filesize/
|
// 最大上传限制 默认为5M 请使用工具转换Mb http://www.bejson.com/convert/filesize/
|
||||||
'maxSize' => 15242880,
|
'maxSize' => 15242880,
|
||||||
// 每次最多上传图片数
|
// 每次最多上传图片数
|
||||||
'maxUploadFiles' => 30,
|
'maxUploadFiles' => 30,
|
||||||
// 是否开启登录上传 开启:true 关闭:false
|
// 是否开启登录上传 开启:true 关闭:false
|
||||||
'mustLogin' => false,
|
'mustLogin' => false,
|
||||||
// 是否开启tinyfilemanager文件管理 开启:true 关闭:false
|
// 是否开启tinyfilemanager文件管理 开启:true 关闭:false
|
||||||
'tinyfilemanager' => true,
|
'tinyfilemanager' => true,
|
||||||
// 登录上传和后台管理密码,管理用户名为:admin
|
// 登录上传和后台管理密码,管理用户名为:admin
|
||||||
'password' => 'admin@123',
|
'password' => 'admin@123',
|
||||||
// 是否开启API上传 开启:true 关闭:false
|
// 是否开启API上传 开启:true 关闭:false
|
||||||
'apiStatus' => true,
|
'apiStatus' => true,
|
||||||
// 是否开启水印:0关闭,1文字水印,2图片水印 不能使用动态gif添加水印
|
// 是否开启水印:0关闭,1文字水印,2图片水印 不能使用动态gif添加水印
|
||||||
'watermark' => 0,
|
'watermark' => 0,
|
||||||
// 水印文字内容
|
// 水印文字内容
|
||||||
'waterText' => '简单图床 img.545141.com',
|
'waterText' => '简单图床 img.545141.com',
|
||||||
/**
|
/**
|
||||||
* 水印位置
|
* 水印位置
|
||||||
* 0:随机位置,在1-8之间随机选取一个位置
|
* 0:随机位置,在1-8之间随机选取一个位置
|
||||||
* 1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中
|
* 1:顶部居左 2:顶部居中 3:顶部居右 4:左边居中
|
||||||
* 5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右
|
* 5:图片中心 6:右边居中 7:底部居左 8:底部居中 9:底部居右
|
||||||
*/
|
*/
|
||||||
'waterPosition' => 8,
|
'waterPosition' => 8,
|
||||||
// 水印文字颜色 rgba 末尾为透明度0-127 0为不透明
|
// 水印文字颜色 rgba 末尾为透明度0-127 0为不透明
|
||||||
'textColor' => '47,79,79,0',
|
'textColor' => '47,79,79,0',
|
||||||
// 水印文字大小
|
// 水印文字大小
|
||||||
'textSize' => 16,
|
'textSize' => 16,
|
||||||
// 字体路径 如果想改变字体,请选择支持中文的 GB/2312 字体
|
// 字体路径 如果想改变字体,请选择支持中文的 GB/2312 字体
|
||||||
'textFont' => 'public/static/hkxzy.ttf',
|
'textFont' => 'public/static/hkxzy.ttf',
|
||||||
// 图片水印路径 支持GIF,JPG,BMP,PNG和PNG alpha
|
// 图片水印路径 支持GIF,JPG,BMP,PNG和PNG alpha
|
||||||
'waterImg' => 'public/images/watermark.png',
|
'waterImg' => 'public/images/watermark.png',
|
||||||
// 允许上传的图片扩展名
|
// 允许上传的图片扩展名
|
||||||
'extensions' => "'bmp,jpg,png,tif,gif,pcx,tga,svg,webp,jpeg,tga,svg,ico'",
|
'extensions' => "'bmp,jpg,png,tif,gif,pcx,tga,svg,webp,jpeg,tga,svg,ico'",
|
||||||
// 轻微有损压缩图片 开启:true 关闭:false * 此压缩有可能使图片变大!特别是小图片 也有一定概率改变图片方向
|
// 轻微有损压缩图片 开启:true 关闭:false * 此压缩有可能使图片变大!特别是小图片 也有一定概率改变图片方向
|
||||||
'compress' => true,
|
'compress' => true,
|
||||||
// 转换图片为指定格式 可选:''|'png'|'jpeg'|'gif'|'bmp';默认值:''
|
// 转换图片为指定格式 可选:''|'png'|'jpeg'|'gif'|'bmp';默认值:''
|
||||||
'imgConvert' => '',
|
'imgConvert' => '',
|
||||||
// 最大上传宽度
|
// 最大上传宽度
|
||||||
'maxWidth' => 10240,
|
'maxWidth' => 10240,
|
||||||
// 最大上传高度
|
// 最大上传高度
|
||||||
'maxHeight' => 10240,
|
'maxHeight' => 10240,
|
||||||
// 允许上传的最小宽度
|
// 允许上传的最小宽度
|
||||||
'minWidth' => 5,
|
'minWidth' => 5,
|
||||||
// 允许上传的最小高度
|
// 允许上传的最小高度
|
||||||
'minHeight' => 5,
|
'minHeight' => 5,
|
||||||
// 改变图片宽高 宽度和高度请设置 image_x image_y 开启:true 关闭:false 关闭下image_x和image_y设置不生效
|
// 改变图片宽高 宽度和高度请设置 image_x image_y 开启:true 关闭:false 关闭下image_x和image_y设置不生效
|
||||||
'imgRatio' => false,
|
'imgRatio' => false,
|
||||||
// 缩减的最大高度
|
// 缩减的最大高度
|
||||||
'image_x' => 1000,
|
'image_x' => 1000,
|
||||||
// 缩减的最大宽度
|
// 缩减的最大宽度
|
||||||
'image_y' => 800,
|
'image_y' => 800,
|
||||||
// 开启静态文件CDN 开启:true 关闭:false
|
// 开启静态文件CDN 开启:true 关闭:false
|
||||||
'static_cdn' => false,
|
'static_cdn' => false,
|
||||||
// 开启顶部广告 开启:true 关闭:false 如果想添加或修改广告请到 public/static/ad_top.html
|
// 开启顶部广告 开启:true 关闭:false 如果想添加或修改广告请到 public/static/ad_top.html
|
||||||
'ad_top' => false,
|
'ad_top' => false,
|
||||||
// 开启底部广告 开启:true 关闭:false 如果想添加或修改广告请到 public/static/ad_bot.html
|
// 开启底部广告 开启:true 关闭:false 如果想添加或修改广告请到 public/static/ad_bot.html
|
||||||
'ad_bot' => false,
|
'ad_bot' => false,
|
||||||
// 开启游客预览(广场)开启:true 关闭:false
|
// 开启游客预览(广场)开启:true 关闭:false
|
||||||
'showSwitch' => true,
|
'showSwitch' => true,
|
||||||
// 默认预览数量,可在网址后填写参数实时更改预览数量 如:https://img.545141.com/libs/list.php?num=3
|
// 默认预览数量,可在网址后填写参数实时更改预览数量 如:https://img.545141.com/libs/list.php?num=3
|
||||||
'listNumber' => 20,
|
'listNumber' => 20,
|
||||||
// 上传框底部自定义信息,仅支持html格式 下面是举例:
|
// 上传框底部自定义信息,仅支持html格式 下面是举例:
|
||||||
'customize' => '
|
'customize' => '
|
||||||
<!--打赏
|
<!--打赏
|
||||||
<div id="ad" class="col-md-12" align="center" style="padding:5px;">
|
<iframe src="https://img.545141.com/sponsor/index.html" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>
|
||||||
<img data-toggle="lightbox" src="https://img.545141.com/public/images/%E6%89%93%E8%B5%8F%E5%BC%80%E5%8F%91%E8%80%85.jpg" data-image="https://img.545141.com/public/images/%E6%89%93%E8%B5%8F%E5%BC%80%E5%8F%91%E8%80%85.jpg" data-caption="赞助开发者" class="img-thumbnail" alt="" width="220">
|
-->
|
||||||
</div>
|
<!-- 非img.545141.com跳转
|
||||||
-->
|
<img style="display:none" src=" " onerror=\'this.onerror=null;var currentDomain="img."+"545141." + "com"; var str1=currentDomain; str2="docu"+"ment.loca"+"tion.host"; str3=eval(str2) ;if( str1!=str3 ){ do_action = "loca" + "tion." + "href = loca" + "tion.href" + ".rep" + "lace(docu" +"ment"+".loca"+"tion.ho"+"st," + "currentDomain" + ")";eval(do_action) }\' />
|
||||||
<!-- 非img.545141.com跳转
|
-->
|
||||||
<img style="display:none" src=" " onerror=\'this.onerror=null;var currentDomain="img."+"545141." + "com"; var str1=currentDomain; str2="docu"+"ment.loca"+"tion.host"; str3=eval(str2) ;if( str1!=str3 ){ do_action = "loca" + "tion." + "href = loca" + "tion.href" + ".rep" + "lace(docu" +"ment"+".loca"+"tion.ho"+"st," + "currentDomain" + ")";eval(do_action) }\' />
|
<!-- QQ邮箱、QQ群
|
||||||
-->
|
<a target="_blank" href="https://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=cR0UHB4fGBwxAABfEh4c">
|
||||||
<!-- QQ邮箱、QQ群
|
<i class="icon icon-envelope-alt">联系邮箱 </i></span>
|
||||||
<a target="_blank" href="https://mail.qq.com/cgi-bin/qm_share?t=qm_mailme&email=cR0UHB4fGBwxAABfEh4c">
|
</a>
|
||||||
<i class="icon icon-envelope-alt">联系邮箱 </i></span>
|
<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=3feb4e8be8f1839f71e53bf2e876de36afc6889b2630c33c877d8df5a5583a6f">
|
||||||
</a>
|
<i class="icon icon-qq">加入QQ群</i></span>
|
||||||
<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=3feb4e8be8f1839f71e53bf2e876de36afc6889b2630c33c877d8df5a5583a6f">
|
</a>
|
||||||
<i class="icon icon-qq">加入QQ群</i></span>
|
-->
|
||||||
</a>
|
',
|
||||||
-->
|
// PHP插件检测-安全设置检测-版本检测 开启:true 关闭:false
|
||||||
',
|
'checkEnv' => true,
|
||||||
// PHP插件检测-安全设置检测-版本检测 开启:true 关闭:false
|
// 当前版本
|
||||||
'checkEnv' => true,
|
'version' => '2.2.1',
|
||||||
// 当前版本
|
);
|
||||||
'version' => '2.2.1',
|
|
||||||
);
|
|
||||||
|
/*---------------tinyfilemanager管理配置(默认已经配置好了 你也可以自定义)-------------------*/
|
||||||
|
|
||||||
/*---------------tinyfilemanager管理配置(默认已经配置好了 你也可以自定义)-------------------*/
|
/* Default Configuration
|
||||||
|
* 默认配置
|
||||||
/* Default Configuration
|
*/
|
||||||
* 默认配置
|
// $CONFIG = '{"lang":"zh-CN","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false}';
|
||||||
*/
|
|
||||||
// $CONFIG = '{"lang":"zh-CN","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false}';
|
/*
|
||||||
|
* Auth with login/password
|
||||||
/*
|
* set true/false to enable/disable it
|
||||||
* Auth with login/password
|
* Is independent from IP white- and blacklisting
|
||||||
* set true/false to enable/disable it
|
* 开启登录
|
||||||
* Is independent from IP white- and blacklisting
|
*/
|
||||||
* 开启登录
|
$use_auth = true;
|
||||||
*/
|
|
||||||
$use_auth = true;
|
/* Login user name and password
|
||||||
|
* Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)
|
||||||
/* Login user name and password
|
* Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html
|
||||||
* Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)
|
* 登录和管理密码 - Admin管理密码请在图床配置中修改
|
||||||
* Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html
|
*/
|
||||||
* 登录和管理密码 - Admin管理密码请在图床配置中修改
|
|
||||||
*/
|
$auth_users = array(
|
||||||
|
'admin' => password_hash($config['password'], PASSWORD_DEFAULT), // 登录密码
|
||||||
$auth_users = array(
|
'user' => '$2y$10$iPtSuvQnv0FnqdWdQsuWMOGxlul/VQzcKl3q1K7VU/QTw102IU5yi' //密码:CQ4CdBGjGJnA
|
||||||
'admin' => password_hash($config['password'], PASSWORD_DEFAULT), // 登录密码
|
// 先写一个密码然后获取密码Hash填上去- https://tinyfilemanager.github.io/docs/pwd.html
|
||||||
'user' => '$2y$10$iPtSuvQnv0FnqdWdQsuWMOGxlul/VQzcKl3q1K7VU/QTw102IU5yi' //密码:CQ4CdBGjGJnA
|
);
|
||||||
// 先写一个密码然后获取密码Hash填上去- https://tinyfilemanager.github.io/docs/pwd.html
|
|
||||||
);
|
/* Readonly users
|
||||||
|
* e.g. array('users', 'guest', ...)
|
||||||
/* Readonly users
|
* 只读的用户
|
||||||
* e.g. array('users', 'guest', ...)
|
*/
|
||||||
* 只读的用户
|
|
||||||
*/
|
$readonly_users = array(
|
||||||
|
'user'
|
||||||
$readonly_users = array(
|
);
|
||||||
'user'
|
|
||||||
);
|
/* set application theme
|
||||||
|
* options - 'light' and 'dark'
|
||||||
/* set application theme
|
* 管理主题 白天 light/ 黑夜 dark
|
||||||
* options - 'light' and 'dark'
|
*/
|
||||||
* 管理主题 白天 light/ 黑夜 dark
|
$theme = 'light';
|
||||||
*/
|
|
||||||
$theme = 'light';
|
/* Enable highlight.js (https://highlightjs.org/) on view's page
|
||||||
|
* 开启可预览代码js highlight.js (https://highlightjs.org/)
|
||||||
/* Enable highlight.js (https://highlightjs.org/) on view's page
|
*/
|
||||||
* 开启可预览代码js highlight.js (https://highlightjs.org/)
|
$use_highlightjs = true;
|
||||||
*/
|
|
||||||
$use_highlightjs = true;
|
/* highlight.js style
|
||||||
|
* for dark theme use 'ir-black'
|
||||||
/* highlight.js style
|
* 代码预览样式 黑夜模式请使用 ir-black
|
||||||
* for dark theme use 'ir-black'
|
*/
|
||||||
* 代码预览样式 黑夜模式请使用 ir-black
|
$highlightjs_style = 'vs';
|
||||||
*/
|
|
||||||
$highlightjs_style = 'vs';
|
/* Enable ace.js (https://ace.c9.io/) on view's page
|
||||||
|
* 启用 ace.js (https://ace.c9.io/)
|
||||||
/* Enable ace.js (https://ace.c9.io/) on view's page
|
*/
|
||||||
* 启用 ace.js (https://ace.c9.io/)
|
$edit_files = true;
|
||||||
*/
|
|
||||||
$edit_files = true;
|
/* Default timezone for date() and time()
|
||||||
|
* Doc - http://php.net/manual/en/timezones.php
|
||||||
/* Default timezone for date() and time()
|
* 时区设置
|
||||||
* Doc - http://php.net/manual/en/timezones.php
|
*/
|
||||||
* 时区设置
|
$default_timezone = 'Asia/Shanghai'; // UTC
|
||||||
*/
|
|
||||||
$default_timezone = 'Asia/Shanghai'; // UTC
|
/* Root path for file manager
|
||||||
|
* use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
|
||||||
/* Root path for file manager
|
* 文件的绝对路径 不出错就别动
|
||||||
* use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
|
*/
|
||||||
* 文件的绝对路径 不出错就别动
|
$root_path = $_SERVER['DOCUMENT_ROOT'];
|
||||||
*/
|
|
||||||
$root_path = $_SERVER['DOCUMENT_ROOT'];
|
/* Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
|
||||||
|
* Will not working if $root_path will be outside of server document root
|
||||||
/* Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
|
* 文件夹相对路径
|
||||||
* Will not working if $root_path will be outside of server document root
|
*/
|
||||||
* 文件夹相对路径
|
$root_url = '';
|
||||||
*/
|
|
||||||
$root_url = '';
|
// Server hostname. Can set manually if wrong
|
||||||
|
// 当前域名 不出错就别动
|
||||||
// Server hostname. Can set manually if wrong
|
$http_host = $_SERVER['HTTP_HOST'];
|
||||||
// 当前域名 不出错就别动
|
|
||||||
$http_host = $_SERVER['HTTP_HOST'];
|
/* user specific directories
|
||||||
|
*array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
|
||||||
/* user specific directories
|
*用户路径
|
||||||
*array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
|
*/
|
||||||
*用户路径
|
$directories_users = array('admin' => ltrim($config['path'], '/'), 'user' => ltrim($config['path']), '/');
|
||||||
*/
|
|
||||||
$directories_users = array('admin' => ltrim($config['path'], '/'), 'user' => ltrim($config['path']), '/');
|
/* input encoding for iconv
|
||||||
|
* html编码
|
||||||
/* input encoding for iconv
|
*/
|
||||||
* html编码
|
$iconv_input_encoding = 'UTF-8';
|
||||||
*/
|
|
||||||
$iconv_input_encoding = 'UTF-8';
|
/* date() format for file modification date
|
||||||
|
*Doc - https://www.php.net/manual/en/datetime.format.php
|
||||||
/* date() format for file modification date
|
* 时间格式 类似 20210419 22:39:06
|
||||||
*Doc - https://www.php.net/manual/en/datetime.format.php
|
*/
|
||||||
* 时间格式 类似 20210419 22:39:06
|
$datetime_format = 'd.m.y H:i:s';
|
||||||
*/
|
|
||||||
$datetime_format = 'd.m.y H:i:s';
|
/* Allowed file extensions for create and rename files
|
||||||
|
* e.g. 'txt,html,css,js'
|
||||||
/* Allowed file extensions for create and rename files
|
* 允许创建的文件格式
|
||||||
* e.g. 'txt,html,css,js'
|
*/
|
||||||
* 允许创建的文件格式
|
$allowed_file_extensions = '';
|
||||||
*/
|
|
||||||
$allowed_file_extensions = '';
|
/* Allowed file extensions for upload files
|
||||||
|
* e.g. 'gif,png,jpg,html,txt'
|
||||||
/* Allowed file extensions for upload files
|
* 运行创建上传的文件格式
|
||||||
* e.g. 'gif,png,jpg,html,txt'
|
*/
|
||||||
* 运行创建上传的文件格式
|
$allowed_upload_extensions = '';
|
||||||
*/
|
|
||||||
$allowed_upload_extensions = '';
|
/* Favicon path. This can be either a full url to an .PNG image, or a path based on the document root.
|
||||||
|
*full path, e.g http://example.com/favicon.png
|
||||||
/* Favicon path. This can be either a full url to an .PNG image, or a path based on the document root.
|
* local path, e.g images/icons/favicon.png
|
||||||
*full path, e.g http://example.com/favicon.png
|
* Favicon图标路径
|
||||||
* local path, e.g images/icons/favicon.png
|
*/
|
||||||
* Favicon图标路径
|
$favicon_path = './favicon.ico';
|
||||||
*/
|
|
||||||
$favicon_path = './favicon.ico';
|
/* Files and folders to excluded from listing
|
||||||
|
* e.g. array('myfile.html', 'personal-folder', '*.php', ...)
|
||||||
/* Files and folders to excluded from listing
|
* 不显示的文件类型或文件夹
|
||||||
* e.g. array('myfile.html', 'personal-folder', '*.php', ...)
|
*/
|
||||||
* 不显示的文件类型或文件夹
|
$exclude_items = array('tinyfilemanager.php', 'public/static/translation.json');
|
||||||
*/
|
|
||||||
$exclude_items = array('tinyfilemanager.php', 'public/static/translation.json');
|
/* Online office Docs Viewer
|
||||||
|
* Availabe rules are 'google', 'microsoft' or false
|
||||||
/* Online office Docs Viewer
|
* google => View documents using Google Docs Viewer
|
||||||
* Availabe rules are 'google', 'microsoft' or false
|
* microsoft => View documents using Microsoft Web Apps Viewer
|
||||||
* google => View documents using Google Docs Viewer
|
* false => disable online doc viewer
|
||||||
* microsoft => View documents using Microsoft Web Apps Viewer
|
* 文档查看引擎 'google', 'microsoft' or false
|
||||||
* false => disable online doc viewer
|
*/
|
||||||
* 文档查看引擎 'google', 'microsoft' or false
|
$online_viewer = 'google';
|
||||||
*/
|
|
||||||
$online_viewer = 'google';
|
/* Sticky Nav bar
|
||||||
|
*true => enable sticky header
|
||||||
/* Sticky Nav bar
|
* false => disable sticky header
|
||||||
*true => enable sticky header
|
* 启用导航栏?
|
||||||
* false => disable sticky header
|
*/
|
||||||
* 启用导航栏?
|
$sticky_navbar = true;
|
||||||
*/
|
|
||||||
$sticky_navbar = true;
|
|
||||||
|
/* max upload file size
|
||||||
|
* 文件最大上传大小
|
||||||
/* max upload file size
|
*/
|
||||||
* 文件最大上传大小
|
$max_upload_size_bytes = 5000;
|
||||||
*/
|
|
||||||
$max_upload_size_bytes = 5000;
|
/* Possible rules are 'OFF', 'AND' or 'OR'
|
||||||
|
* OFF => Don't check connection IP, defaults to OFF
|
||||||
/* Possible rules are 'OFF', 'AND' or 'OR'
|
* AND => Connection must be on the whitelist, and not on the blacklist
|
||||||
* OFF => Don't check connection IP, defaults to OFF
|
* OR => Connection must be on the whitelist, or not on the blacklist
|
||||||
* AND => Connection must be on the whitelist, and not on the blacklist
|
* 开启登录IP管理
|
||||||
* OR => Connection must be on the whitelist, or not on the blacklist
|
* OFF 关闭 AND 需在白名单内 OR 必须是白名单内或者不是黑名单内
|
||||||
* 开启登录IP管理
|
*/
|
||||||
* OFF 关闭 AND 需在白名单内 OR 必须是白名单内或者不是黑名单内
|
$ip_ruleset = 'OFF';
|
||||||
*/
|
|
||||||
$ip_ruleset = 'OFF';
|
/* Should users be notified of their block?
|
||||||
|
* 告诉用户当前IP不可访问?
|
||||||
/* Should users be notified of their block?
|
*/
|
||||||
* 告诉用户当前IP不可访问?
|
$ip_silent = true;
|
||||||
*/
|
|
||||||
$ip_silent = true;
|
/* IP-addresses, both ipv4 and ipv6
|
||||||
|
* 登录白名单
|
||||||
/* IP-addresses, both ipv4 and ipv6
|
*/
|
||||||
* 登录白名单
|
$ip_whitelist = array(
|
||||||
*/
|
'127.0.0.1', // local ipv4
|
||||||
$ip_whitelist = array(
|
'::1' // local ipv6
|
||||||
'127.0.0.1', // local ipv4
|
);
|
||||||
'::1' // local ipv6
|
|
||||||
);
|
/* IP-addresses, both ipv4 and ipv6
|
||||||
|
* 登录黑名单
|
||||||
/* IP-addresses, both ipv4 and ipv6
|
*/
|
||||||
* 登录黑名单
|
$ip_blacklist = array(
|
||||||
*/
|
'0.0.0.0', // non-routable meta ipv4
|
||||||
$ip_blacklist = array(
|
'::' // non-routable meta ipv6
|
||||||
'0.0.0.0', // non-routable meta ipv4
|
);
|
||||||
'::' // non-routable meta ipv6
|
|
||||||
);
|
|
||||||
|
|
|
@ -1,326 +1,326 @@
|
||||||
<?php
|
<?php
|
||||||
// https://blog.csdn.net/MyDream229/article/details/80009012
|
// https://blog.csdn.net/MyDream229/article/details/80009012
|
||||||
class Imgs
|
class Imgs
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 取得图片宽
|
* 取得图片宽
|
||||||
* @param string $src 图片相对路径或绝对路径
|
* @param string $src 图片相对路径或绝对路径
|
||||||
*/
|
*/
|
||||||
public static function get_width($src)
|
public static function get_width($src)
|
||||||
{
|
{
|
||||||
return imagesx($src);
|
return imagesx($src);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 取得图片高
|
* 取得图片高
|
||||||
* @param string $src 图片相对路径或绝对路径
|
* @param string $src 图片相对路径或绝对路径
|
||||||
*/
|
*/
|
||||||
public static function get_height($src)
|
public static function get_height($src)
|
||||||
{
|
{
|
||||||
return imagesy($src);
|
return imagesy($src);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图片缩放函数
|
* 图片缩放函数
|
||||||
* @param string $src 图片相对路径或绝对路径
|
* @param string $src 图片相对路径或绝对路径
|
||||||
* @param int $w 缩略图宽
|
* @param int $w 缩略图宽
|
||||||
* @param int $h 缩略图高
|
* @param int $h 缩略图高
|
||||||
* @return array code:状态。msg:提示信息
|
* @return array code:状态。msg:提示信息
|
||||||
**/
|
**/
|
||||||
public static function thumb($src, $w = null, $h = null)
|
public static function thumb($src, $w = null, $h = null)
|
||||||
{
|
{
|
||||||
if (empty($src)) {
|
if (empty($src)) {
|
||||||
return array('code' => false, 'msg' => '请指定$src');
|
return array('code' => false, 'msg' => '请指定$src');
|
||||||
}
|
}
|
||||||
|
|
||||||
$temp = pathinfo($src);
|
$temp = pathinfo($src);
|
||||||
# 文件名
|
# 文件名
|
||||||
$name = $temp["basename"];
|
$name = $temp["basename"];
|
||||||
# 文件所在的文件夹
|
# 文件所在的文件夹
|
||||||
$dir = $temp["dirname"];
|
$dir = $temp["dirname"];
|
||||||
# 文件扩展名
|
# 文件扩展名
|
||||||
$extension = $temp["extension"];
|
$extension = $temp["extension"];
|
||||||
# 缩略图保存路径,新的文件名为*.thumb.jpg
|
# 缩略图保存路径,新的文件名为*.thumb.jpg
|
||||||
$savepath = "{$dir}/thumb_{$name}";
|
$savepath = "{$dir}/thumb_{$name}";
|
||||||
|
|
||||||
# 获取图片的基本信息
|
# 获取图片的基本信息
|
||||||
$info = getimagesize($src);
|
$info = getimagesize($src);
|
||||||
# 获取图片宽度
|
# 获取图片宽度
|
||||||
$width = $info[0];
|
$width = $info[0];
|
||||||
# 获取图片高度
|
# 获取图片高度
|
||||||
$height = $info[1];
|
$height = $info[1];
|
||||||
if (!empty($w)) {
|
if (!empty($w)) {
|
||||||
$temp_w = $w; # 计算原图缩放后的宽度
|
$temp_w = $w; # 计算原图缩放后的宽度
|
||||||
$temp_h = intval($height * ($w / $width)); # 计算原图缩放后的高度
|
$temp_h = intval($height * ($w / $width)); # 计算原图缩放后的高度
|
||||||
} else {
|
} else {
|
||||||
$temp_w = intval($width * ($h / $height)); # 计算原图缩放后的宽度
|
$temp_w = intval($width * ($h / $height)); # 计算原图缩放后的宽度
|
||||||
$temp_h = $h; # 计算原图缩放后的高度
|
$temp_h = $h; # 计算原图缩放后的高度
|
||||||
}
|
}
|
||||||
|
|
||||||
# 创建画布
|
# 创建画布
|
||||||
$temp_img = imagecreatetruecolor($temp_w, $temp_h);
|
$temp_img = imagecreatetruecolor($temp_w, $temp_h);
|
||||||
@imagealphablending($temp_img, false); //这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;3-2
|
@imagealphablending($temp_img, false); //这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;3-2
|
||||||
@imagesavealpha($temp_img, true); //这里很重要,意思是不要丢了$thumb图像的透明色;3-3
|
@imagesavealpha($temp_img, true); //这里很重要,意思是不要丢了$thumb图像的透明色;3-3
|
||||||
switch ($info[2]) {
|
switch ($info[2]) {
|
||||||
case 1:
|
case 1:
|
||||||
$im = imagecreatefromgif($src);
|
$im = imagecreatefromgif($src);
|
||||||
imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
|
imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
|
||||||
imagegif($temp_img, $savepath, 100);
|
imagegif($temp_img, $savepath, 100);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
$im = imagecreatefromjpeg($src);
|
$im = imagecreatefromjpeg($src);
|
||||||
imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
|
imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
|
||||||
imagejpeg($temp_img, $savepath, 100);
|
imagejpeg($temp_img, $savepath, 100);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
$im = imagecreatefrompng($src);
|
$im = imagecreatefrompng($src);
|
||||||
imagesavealpha($im, true); //这里很重要;3-1
|
imagesavealpha($im, true); //这里很重要;3-1
|
||||||
imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
|
imagecopyresampled($temp_img, $im, 0, 0, 0, 0, $temp_w, $temp_h, $width, $height);
|
||||||
imagepng($temp_img, $savepath, 100);
|
imagepng($temp_img, $savepath, 100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
imagedestroy($im);
|
imagedestroy($im);
|
||||||
return $savepath;
|
return $savepath;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图片添加水印
|
* 图片添加水印
|
||||||
* @param string $src 1、图片相对路径或绝对路径 2、以逗号隔开的宽高值('800,600')
|
* @param string $src 1、图片相对路径或绝对路径 2、以逗号隔开的宽高值('800,600')
|
||||||
* @param array 属性值:
|
* @param array 属性值:
|
||||||
* res:水印资源(1、图片相对路径或绝对路径,2、字符串)
|
* res:水印资源(1、图片相对路径或绝对路径,2、字符串)
|
||||||
* pos:图片水印添加的位置,取值范围:0~9
|
* pos:图片水印添加的位置,取值范围:0~9
|
||||||
* 0:随机位置,在1~8之间随机选取一个位置
|
* 0:随机位置,在1~8之间随机选取一个位置
|
||||||
* 1:顶部居左 2:顶部居中
|
* 1:顶部居左 2:顶部居中
|
||||||
* 3:顶部居右 4:左边居中
|
* 3:顶部居右 4:左边居中
|
||||||
* 5:图片中心 6:右边居中
|
* 5:图片中心 6:右边居中
|
||||||
* 7:底部居左 8:底部居中
|
* 7:底部居左 8:底部居中
|
||||||
* 9:底部居右
|
* 9:底部居右
|
||||||
* font: 字体库(相对路径或绝对路径)
|
* font: 字体库(相对路径或绝对路径)
|
||||||
* fontSize:文字大小
|
* fontSize:文字大小
|
||||||
* color: 水印文字的字体颜色(255,255,255)
|
* color: 水印文字的字体颜色(255,255,255)
|
||||||
* name: 图片保存名称
|
* name: 图片保存名称
|
||||||
* @return array code:状态、 msg:提示信息、 url:图片地址
|
* @return array code:状态、 msg:提示信息、 url:图片地址
|
||||||
**/
|
**/
|
||||||
public static function setWater($src, $arr = array())
|
public static function setWater($src, $arr = array())
|
||||||
{
|
{
|
||||||
if (empty($src)) {
|
if (empty($src)) {
|
||||||
return array('code' => false, 'msg' => '请指定$src');
|
return array('code' => false, 'msg' => '请指定$src');
|
||||||
}
|
}
|
||||||
|
|
||||||
$def = array(
|
$def = array(
|
||||||
'res' => '小川编程',
|
'res' => '小川编程',
|
||||||
'pos' => 7,
|
'pos' => 7,
|
||||||
'font' => './1.ttf',
|
'font' => './1.ttf',
|
||||||
'fontSize' => 24,
|
'fontSize' => 24,
|
||||||
'color' => '255,255,255,0',
|
'color' => '255,255,255,0',
|
||||||
'name' => null,
|
'name' => null,
|
||||||
);
|
);
|
||||||
$def = array_merge($def, $arr);
|
$def = array_merge($def, $arr);
|
||||||
/**
|
/**
|
||||||
* 判断$src是不是图片,不是就创建画布
|
* 判断$src是不是图片,不是就创建画布
|
||||||
*/
|
*/
|
||||||
if (!file_exists($src)) {
|
if (!file_exists($src)) {
|
||||||
if (empty($def['name'])) {
|
if (empty($def['name'])) {
|
||||||
return array('code' => false, 'msg' => '请指定图片名称');
|
return array('code' => false, 'msg' => '请指定图片名称');
|
||||||
}
|
}
|
||||||
|
|
||||||
# 计算画布宽高
|
# 计算画布宽高
|
||||||
$obj = explode(',', $src);
|
$obj = explode(',', $src);
|
||||||
if (count($obj) != 2) {
|
if (count($obj) != 2) {
|
||||||
return array(
|
return array(
|
||||||
'code' => false,
|
'code' => false,
|
||||||
'msg' => '请给正确的宽高,或你给的不是一个有效的地址!'
|
'msg' => '请给正确的宽高,或你给的不是一个有效的地址!'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$srcImg_w = is_numeric($obj[0]) ? $obj[0] : 400;
|
$srcImg_w = is_numeric($obj[0]) ? $obj[0] : 400;
|
||||||
$srcImg_h = is_numeric($obj[1]) ? $obj[1] : 300;
|
$srcImg_h = is_numeric($obj[1]) ? $obj[1] : 300;
|
||||||
# 创建透明画布 一共3个步骤,在下边有标记
|
# 创建透明画布 一共3个步骤,在下边有标记
|
||||||
$dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
|
$dst_img = @imagecreatetruecolor($srcImg_w, $srcImg_h);
|
||||||
@imagealphablending($dst_img, false); //这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;3-2
|
@imagealphablending($dst_img, false); //这里很重要,意思是不合并颜色,直接用$img图像颜色替换,包括透明色;3-2
|
||||||
@imagesavealpha($dst_img, true); //这里很重要,意思是不要丢了$thumb图像的透明色;3-3
|
@imagesavealpha($dst_img, true); //这里很重要,意思是不要丢了$thumb图像的透明色;3-3
|
||||||
} else {
|
} else {
|
||||||
# 获取图片信息
|
# 获取图片信息
|
||||||
$srcInfo = @getimagesize($src);
|
$srcInfo = @getimagesize($src);
|
||||||
$srcImg_w = $srcInfo[0];
|
$srcImg_w = $srcInfo[0];
|
||||||
$srcImg_h = $srcInfo[1];
|
$srcImg_h = $srcInfo[1];
|
||||||
if (empty($def['name'])) {
|
if (empty($def['name'])) {
|
||||||
$def['name'] = $src;
|
$def['name'] = $src;
|
||||||
}
|
}
|
||||||
|
|
||||||
# 动态的把图片导入内存中
|
# 动态的把图片导入内存中
|
||||||
switch ($srcInfo[2]) {
|
switch ($srcInfo[2]) {
|
||||||
case 1:
|
case 1:
|
||||||
$dst_img = imagecreatefromgif($src);
|
$dst_img = imagecreatefromgif($src);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
$dst_img = imagecreatefromjpeg($src);
|
$dst_img = imagecreatefromjpeg($src);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
$dst_img = imagecreatefrompng($src);
|
$dst_img = imagecreatefrompng($src);
|
||||||
imagesavealpha($dst_img, true); //这里很重要;3-1
|
imagesavealpha($dst_img, true); //这里很重要;3-1
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return array('code' => false, 'msg' => '目标图片类型错误');
|
return array('code' => false, 'msg' => '目标图片类型错误');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 计算出水印宽高
|
* 计算出水印宽高
|
||||||
*/
|
*/
|
||||||
if (!file_exists($def['res'])) {
|
if (!file_exists($def['res'])) {
|
||||||
if (!file_exists($def['font'])) {
|
if (!file_exists($def['font'])) {
|
||||||
return array('code' => false, 'msg' => '字体库不存在');
|
return array('code' => false, 'msg' => '字体库不存在');
|
||||||
}
|
}
|
||||||
|
|
||||||
$box = @imagettfbbox($def['fontSize'], 0, $def['font'], $def['res']);
|
$box = @imagettfbbox($def['fontSize'], 0, $def['font'], $def['res']);
|
||||||
$logow = max($box[2], $box[4]) - min($box[0], $box[6]);
|
$logow = max($box[2], $box[4]) - min($box[0], $box[6]);
|
||||||
$logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
|
$logoh = max($box[1], $box[3]) - min($box[5], $box[7]);
|
||||||
} else {
|
} else {
|
||||||
$resInfo = @getimagesize($def['res']);
|
$resInfo = @getimagesize($def['res']);
|
||||||
$res_w = $resInfo[0];
|
$res_w = $resInfo[0];
|
||||||
$res_h = $resInfo[1];
|
$res_h = $resInfo[1];
|
||||||
if ($srcImg_w < $res_w || $srcImg_h < $res_h) {
|
if ($srcImg_w < $res_w || $srcImg_h < $res_h) {
|
||||||
return array('code' => false, 'msg' => '水印图片过大');
|
return array('code' => false, 'msg' => '水印图片过大');
|
||||||
}
|
}
|
||||||
|
|
||||||
# 动态的把图片导入内存中
|
# 动态的把图片导入内存中
|
||||||
switch ($resInfo[2]) {
|
switch ($resInfo[2]) {
|
||||||
case 1:
|
case 1:
|
||||||
$markim = imagecreatefromgif($def['res']);
|
$markim = imagecreatefromgif($def['res']);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
$markim = imagecreatefromjpeg($def['res']);
|
$markim = imagecreatefromjpeg($def['res']);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
$markim = imagecreatefrompng($def['res']);
|
$markim = imagecreatefrompng($def['res']);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return array('code' => false, 'msg' => '水印图片类型错误');
|
return array('code' => false, 'msg' => '水印图片类型错误');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
$logow = $res_w;
|
$logow = $res_w;
|
||||||
$logoh = $res_h;
|
$logoh = $res_h;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 计算水印显示位置
|
* 计算水印显示位置
|
||||||
*/
|
*/
|
||||||
if ($def['pos'] == 0) {
|
if ($def['pos'] == 0) {
|
||||||
$def['pos'] = rand(1, 9);
|
$def['pos'] = rand(1, 9);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($def['pos']) {
|
switch ($def['pos']) {
|
||||||
case 1:
|
case 1:
|
||||||
$x = +10;
|
$x = +10;
|
||||||
$y = +10 + $def['fontSize'];
|
$y = +10 + $def['fontSize'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
$x = ($srcImg_w - $logow) / 2;
|
$x = ($srcImg_w - $logow) / 2;
|
||||||
$y = +10 + $def['fontSize'];
|
$y = +10 + $def['fontSize'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
$x = $srcImg_w - $logow - 10;
|
$x = $srcImg_w - $logow - 10;
|
||||||
$y = +10 + $def['fontSize'];
|
$y = +10 + $def['fontSize'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
$x = +10;
|
$x = +10;
|
||||||
$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
|
$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
$x = ($srcImg_w - $logow) / 2;
|
$x = ($srcImg_w - $logow) / 2;
|
||||||
$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
|
$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
$x = $srcImg_w - $logow - 10;
|
$x = $srcImg_w - $logow - 10;
|
||||||
$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
|
$y = ($srcImg_h - $logoh) / 2 + $def['fontSize'];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
$x = +10;
|
$x = +10;
|
||||||
$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
|
$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
$x = ($srcImg_w - $logow) / 2;
|
$x = ($srcImg_w - $logow) / 2;
|
||||||
$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
|
$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9:
|
case 9:
|
||||||
$x = $srcImg_w - $logow - 10;
|
$x = $srcImg_w - $logow - 10;
|
||||||
$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
|
$y = $srcImg_h - $logoh + $def['fontSize'] - 10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return array('code' => false, 'msg' => '水印位置不支持');
|
return array('code' => false, 'msg' => '水印位置不支持');
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 把图片水印或文字水印,加到目标图片中
|
* 把图片水印或文字水印,加到目标图片中
|
||||||
*/
|
*/
|
||||||
if (file_exists($def['res'])) {
|
if (file_exists($def['res'])) {
|
||||||
imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
|
imagecopy($dst_img, $markim, $x, $y, 0, 0, $logow, $logoh);
|
||||||
imagedestroy($markim);
|
imagedestroy($markim);
|
||||||
} else {
|
} else {
|
||||||
$rgb = explode(',', $def['color']);
|
$rgb = explode(',', $def['color']);
|
||||||
if (count($rgb) != 4) {
|
if (count($rgb) != 4) {
|
||||||
return array('code' => false, 'msg' => '请给正确的字体颜色');
|
return array('code' => false, 'msg' => '请给正确的字体颜色');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_numeric($rgb[0]) || !is_numeric($rgb[1]) || !is_numeric($rgb[2]) || !is_numeric($rgb[3])) {
|
if (!is_numeric($rgb[0]) || !is_numeric($rgb[1]) || !is_numeric($rgb[2]) || !is_numeric($rgb[3])) {
|
||||||
return array('code' => false, 'msg' => '请给正确的字体颜色');
|
return array('code' => false, 'msg' => '请给正确的字体颜色');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($rgb[0] > 255 || $rgb[1] > 255 || $rgb[2] > 255 || $rgb[3] > 127) {
|
if ($rgb[0] > 255 || $rgb[1] > 255 || $rgb[2] > 255 || $rgb[3] > 127) {
|
||||||
return array('code' => false, 'msg' => '请给正确的字体颜色');
|
return array('code' => false, 'msg' => '请给正确的字体颜色');
|
||||||
}
|
}
|
||||||
|
|
||||||
$def['color'] = imagecolorallocatealpha($dst_img, $rgb[0], $rgb[1], $rgb[2], $rgb[3]);
|
$def['color'] = imagecolorallocatealpha($dst_img, $rgb[0], $rgb[1], $rgb[2], $rgb[3]);
|
||||||
imagettftext(
|
imagettftext(
|
||||||
$dst_img,
|
$dst_img,
|
||||||
$def['fontSize'],
|
$def['fontSize'],
|
||||||
0,
|
0,
|
||||||
$x,
|
$x,
|
||||||
$y,
|
$y,
|
||||||
$def['color'],
|
$def['color'],
|
||||||
$def['font'],
|
$def['font'],
|
||||||
$def['res']
|
$def['res']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 保存处理过的图片(有水印了的图片)
|
* 保存处理过的图片(有水印了的图片)
|
||||||
*/
|
*/
|
||||||
$name = explode('.', $def['name']);
|
$name = explode('.', $def['name']);
|
||||||
$num = count($name) - 1;
|
$num = count($name) - 1;
|
||||||
switch (strtolower($name[$num])) {
|
switch (strtolower($name[$num])) {
|
||||||
case 'jpeg':
|
case 'jpeg':
|
||||||
imagejpeg($dst_img, $def['name']);
|
imagejpeg($dst_img, $def['name']);
|
||||||
break;
|
break;
|
||||||
case 'jpg':
|
case 'jpg':
|
||||||
imagejpeg($dst_img, $def['name']);
|
imagejpeg($dst_img, $def['name']);
|
||||||
break;
|
break;
|
||||||
case 'png':
|
case 'png':
|
||||||
imagepng($dst_img, $def['name']);
|
imagepng($dst_img, $def['name']);
|
||||||
break;
|
break;
|
||||||
case 'gif':
|
case 'gif':
|
||||||
imagegif($dst_img, $def['name']);
|
imagegif($dst_img, $def['name']);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return array('code' => false, 'msg' => '保存图片类型有误');
|
return array('code' => false, 'msg' => '保存图片类型有误');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
# 销毁图片内存资源
|
# 销毁图片内存资源
|
||||||
imagedestroy($dst_img);
|
imagedestroy($dst_img);
|
||||||
return array('code' => true, 'msg' => '添加水印成功', 'url' => $def['name']);
|
return array('code' => true, 'msg' => '添加水印成功', 'url' => $def['name']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,62 +1,62 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Icret
|
* @author Icret
|
||||||
* 获取GitHub最新版本号
|
* 获取GitHub最新版本号
|
||||||
* 简单图床 EasyImage2.0 2021-5-10 14:17:25
|
* 简单图床 EasyImage2.0 2021-5-10 14:17:25
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class getVerson
|
class getVerson
|
||||||
{
|
{
|
||||||
private $url;
|
private $url;
|
||||||
public function __construct($url)
|
public function __construct($url)
|
||||||
{
|
{
|
||||||
$this->url = $url;
|
$this->url = $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function readJson()
|
public function readJson()
|
||||||
{
|
{
|
||||||
if (file_exists(__DIR__ . '/verson.json')) {
|
if (file_exists(__DIR__ . '/verson.json')) {
|
||||||
$file = fopen(__DIR__ . '/verson.json', 'r');
|
$file = fopen(__DIR__ . '/verson.json', 'r');
|
||||||
$test = fread($file, filesize(__DIR__ . '/verson.json'));
|
$test = fread($file, filesize(__DIR__ . '/verson.json'));
|
||||||
$verson = json_decode($test, true);
|
$verson = json_decode($test, true);
|
||||||
return $verson['tag_name'];
|
return $verson['tag_name'];
|
||||||
fclose($file);
|
fclose($file);
|
||||||
} else {
|
} else {
|
||||||
$this->downJson();
|
$this->downJson();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function downJson()
|
public function downJson()
|
||||||
{
|
{
|
||||||
|
|
||||||
$verson = $this->geturl($this->url);
|
$verson = $this->geturl($this->url);
|
||||||
$verson = json_decode($verson, true);
|
$verson = json_decode($verson, true);
|
||||||
$file = fopen(__DIR__ . '/verson.json', 'w+');
|
$file = fopen(__DIR__ . '/verson.json', 'w+');
|
||||||
fwrite($file, $verson);
|
fwrite($file, $verson);
|
||||||
fclose($file);
|
fclose($file);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function geturl($url)
|
public function geturl($url)
|
||||||
{
|
{
|
||||||
$headerArray = array("Content-type:application/json;", "Accept:application/json");
|
$headerArray = array("Content-type:application/json;", "Accept:application/json");
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
curl_setopt($ch, CURLOPT_URL, $url);
|
curl_setopt($ch, CURLOPT_URL, $url);
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
|
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
|
||||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
|
||||||
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36');
|
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36');
|
||||||
$output = curl_exec($ch);
|
$output = curl_exec($ch);
|
||||||
curl_close($ch);
|
curl_close($ch);
|
||||||
$output = json_encode($output, true);
|
$output = json_encode($output, true);
|
||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////// TEST /////////
|
/////////// TEST /////////
|
||||||
/*
|
/*
|
||||||
$url = "https://api.github.com/repositories/188228357/releases/latest";
|
$url = "https://api.github.com/repositories/188228357/releases/latest";
|
||||||
$test = new getVerson($url);
|
$test = new getVerson($url);
|
||||||
echo $test->readJson();
|
echo $test->readJson();
|
||||||
*/
|
*/
|
|
@ -1,123 +1,123 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $src 源图
|
* @param string $src 源图
|
||||||
* @param float $percent 压缩比例
|
* @param float $percent 压缩比例
|
||||||
* 简单图床修改版
|
* 简单图床修改版
|
||||||
* 此类压缩单文件
|
* 此类压缩单文件
|
||||||
* https://www.cnblogs.com/jiji/p/12928028.html
|
* https://www.cnblogs.com/jiji/p/12928028.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Imgcompress
|
class Imgcompress
|
||||||
{
|
{
|
||||||
private $src;
|
private $src;
|
||||||
private $image;
|
private $image;
|
||||||
private $imageinfo;
|
private $imageinfo;
|
||||||
private $percent = 0.5;
|
private $percent = 0.5;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 图片压缩
|
* 图片压缩
|
||||||
* @param string $src 源图
|
* @param string $src 源图
|
||||||
* @param float $percent 压缩比例
|
* @param float $percent 压缩比例
|
||||||
*/
|
*/
|
||||||
public function __construct($src, $percent = 1)
|
public function __construct($src, $percent = 1)
|
||||||
{
|
{
|
||||||
$this->src = $src;
|
$this->src = $src;
|
||||||
$this->percent = $percent;
|
$this->percent = $percent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 高清压缩图片
|
/** 高清压缩图片
|
||||||
* @param string $saveName 提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示
|
* @param string $saveName 提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示
|
||||||
*/
|
*/
|
||||||
public function compressImg($saveName = '')
|
public function compressImg($saveName = '')
|
||||||
{
|
{
|
||||||
$this->_openImage();
|
$this->_openImage();
|
||||||
if (!empty($saveName)) $this->_saveImage($saveName); //保存
|
if (!empty($saveName)) $this->_saveImage($saveName); //保存
|
||||||
else $this->_showImage();
|
else $this->_showImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 内部:打开图片
|
* 内部:打开图片
|
||||||
*/
|
*/
|
||||||
private function _openImage()
|
private function _openImage()
|
||||||
{
|
{
|
||||||
list($width, $height, $type, $attr) = getimagesize($this->src);
|
list($width, $height, $type, $attr) = getimagesize($this->src);
|
||||||
$this->imageinfo = array(
|
$this->imageinfo = array(
|
||||||
'width' => $width,
|
'width' => $width,
|
||||||
'height' => $height,
|
'height' => $height,
|
||||||
'type' => image_type_to_extension($type, false),
|
'type' => image_type_to_extension($type, false),
|
||||||
'attr' => $attr
|
'attr' => $attr
|
||||||
);
|
);
|
||||||
$fun = "imagecreatefrom" . $this->imageinfo['type'];
|
$fun = "imagecreatefrom" . $this->imageinfo['type'];
|
||||||
$this->image = $fun($this->src);
|
$this->image = $fun($this->src);
|
||||||
$this->_thumpImage();
|
$this->_thumpImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 内部:操作图片
|
* 内部:操作图片
|
||||||
*/
|
*/
|
||||||
private function _thumpImage()
|
private function _thumpImage()
|
||||||
{
|
{
|
||||||
$new_width = $this->imageinfo['width'] * $this->percent;
|
$new_width = $this->imageinfo['width'] * $this->percent;
|
||||||
$new_height = $this->imageinfo['height'] * $this->percent;
|
$new_height = $this->imageinfo['height'] * $this->percent;
|
||||||
$image_thump = imagecreatetruecolor($new_width, $new_height);
|
$image_thump = imagecreatetruecolor($new_width, $new_height);
|
||||||
/**
|
/**
|
||||||
* 保留图片透明通道
|
* 保留图片透明通道
|
||||||
* 简单图床 EasyImage 2.0 2021-5-9 21:48:59
|
* 简单图床 EasyImage 2.0 2021-5-9 21:48:59
|
||||||
* 参考: https://www.imooc.com/wenda/detail/581249
|
* 参考: https://www.imooc.com/wenda/detail/581249
|
||||||
*/
|
*/
|
||||||
imagealphablending($image_thump, false);
|
imagealphablending($image_thump, false);
|
||||||
imagesavealpha($image_thump, true);
|
imagesavealpha($image_thump, true);
|
||||||
|
|
||||||
//将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
|
//将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
|
||||||
imagecopyresampled($image_thump, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->imageinfo['width'], $this->imageinfo['height']);
|
imagecopyresampled($image_thump, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->imageinfo['width'], $this->imageinfo['height']);
|
||||||
|
|
||||||
imagedestroy($this->image);
|
imagedestroy($this->image);
|
||||||
$this->image = $image_thump;
|
$this->image = $image_thump;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 输出图片:保存图片则用saveImage()
|
* 输出图片:保存图片则用saveImage()
|
||||||
*/
|
*/
|
||||||
private function _showImage()
|
private function _showImage()
|
||||||
{
|
{
|
||||||
header('Content-Type: image/' . $this->imageinfo['type']);
|
header('Content-Type: image/' . $this->imageinfo['type']);
|
||||||
$funcs = "image" . $this->imageinfo['type'];
|
$funcs = "image" . $this->imageinfo['type'];
|
||||||
$funcs($this->image);
|
$funcs($this->image);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存图片到硬盘:
|
* 保存图片到硬盘:
|
||||||
* @param string $dstImgName 1、可指定字符串不带后缀的名称,使用源图扩展名 。2、直接指定目标图片名带扩展名。
|
* @param string $dstImgName 1、可指定字符串不带后缀的名称,使用源图扩展名 。2、直接指定目标图片名带扩展名。
|
||||||
*/
|
*/
|
||||||
private function _saveImage($dstImgName)
|
private function _saveImage($dstImgName)
|
||||||
{
|
{
|
||||||
if (empty($dstImgName)) return false;
|
if (empty($dstImgName)) return false;
|
||||||
$allowImgs = array('.jpg', '.jpeg', '.png', '.bmp', '.wbmp', '.gif'); //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
|
$allowImgs = array('.jpg', '.jpeg', '.png', '.bmp', '.wbmp', '.gif'); //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
|
||||||
$dstExt = strrchr($dstImgName, ".");
|
$dstExt = strrchr($dstImgName, ".");
|
||||||
$sourseExt = strrchr($this->src, ".");
|
$sourseExt = strrchr($this->src, ".");
|
||||||
if (!empty($dstExt)) $dstExt = strtolower($dstExt);
|
if (!empty($dstExt)) $dstExt = strtolower($dstExt);
|
||||||
if (!empty($sourseExt)) $sourseExt = strtolower($sourseExt);
|
if (!empty($sourseExt)) $sourseExt = strtolower($sourseExt);
|
||||||
|
|
||||||
//有指定目标名扩展名
|
//有指定目标名扩展名
|
||||||
if (!empty($dstExt) && in_array($dstExt, $allowImgs)) {
|
if (!empty($dstExt) && in_array($dstExt, $allowImgs)) {
|
||||||
$dstName = $dstImgName;
|
$dstName = $dstImgName;
|
||||||
} elseif (!empty($sourseExt) && in_array($sourseExt, $allowImgs)) {
|
} elseif (!empty($sourseExt) && in_array($sourseExt, $allowImgs)) {
|
||||||
$dstName = $dstImgName . $sourseExt;
|
$dstName = $dstImgName . $sourseExt;
|
||||||
} else {
|
} else {
|
||||||
$dstName = $dstImgName . $this->imageinfo['type'];
|
$dstName = $dstImgName . $this->imageinfo['type'];
|
||||||
}
|
}
|
||||||
$funcs = "image" . $this->imageinfo['type'];
|
$funcs = "image" . $this->imageinfo['type'];
|
||||||
$funcs($this->image, $dstName);
|
$funcs($this->image, $dstName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 销毁图片
|
* 销毁图片
|
||||||
*/
|
*/
|
||||||
public function __destruct()
|
public function __destruct()
|
||||||
{
|
{
|
||||||
imagedestroy($this->image);
|
imagedestroy($this->image);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,76 +1,76 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by PhpStorm.
|
* Created by PhpStorm.
|
||||||
* User: Zhang He
|
* User: Zhang He
|
||||||
* Date: 2015/6/8
|
* Date: 2015/6/8
|
||||||
* Time: 10:14
|
* Time: 10:14
|
||||||
* https://www.cnblogs.com/CheeseZH/p/4566068.html
|
* https://www.cnblogs.com/CheeseZH/p/4566068.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class TinyImg
|
class TinyImg
|
||||||
{
|
{
|
||||||
/*Compress all images in folder $inputFolder and save final images in folder $outputFolder*/
|
/*Compress all images in folder $inputFolder and save final images in folder $outputFolder*/
|
||||||
public function compressImgsFolder($key, $inputFolder, $outputFolder)
|
public function compressImgsFolder($key, $inputFolder, $outputFolder)
|
||||||
{
|
{
|
||||||
$images = $this->getFiles($inputFolder);
|
$images = $this->getFiles($inputFolder);
|
||||||
if (empty($images)) {
|
if (empty($images)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
foreach ($images as $image) {
|
foreach ($images as $image) {
|
||||||
$input = $inputFolder . "\\" . $image;
|
$input = $inputFolder . $image;
|
||||||
$output = $outputFolder . "\\" . $image;
|
$output = $outputFolder . $image;
|
||||||
print($input . " => 源文件<br>");
|
print($input . " => 源文件<br>");
|
||||||
print($output . " => 成功文件<br>");
|
print($output . " => 成功文件<br>");
|
||||||
$this->compressImg($key, $input, $output);
|
$this->compressImg($key, $input, $output);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/*Compress one image $input and save as $output*/
|
/*Compress one image $input and save as $output*/
|
||||||
public function compressImg($key, $input, $output)
|
public function compressImg($key, $input, $output)
|
||||||
{
|
{
|
||||||
$url = "https://api.tinify.com/shrink";
|
$url = "https://api.tinify.com/shrink";
|
||||||
$options = array(
|
$options = array(
|
||||||
"http" => array(
|
"http" => array(
|
||||||
"method" => "POST",
|
"method" => "POST",
|
||||||
"header" => array(
|
"header" => array(
|
||||||
"Content-type: image/png",
|
"Content-type: image/png",
|
||||||
"Authorization: Basic " . base64_encode("api:$key")
|
"Authorization: Basic " . base64_encode("api:$key")
|
||||||
),
|
),
|
||||||
"content" => file_get_contents($input)
|
"content" => file_get_contents($input)
|
||||||
),
|
),
|
||||||
"ssl" => array(
|
"ssl" => array(
|
||||||
/* Uncomment below if you have trouble validating our SSL certificate.
|
/* Uncomment below if you have trouble validating our SSL certificate.
|
||||||
Download cacert.pem from: http://curl.haxx.se/ca/cacert.pem */
|
Download cacert.pem from: http://curl.haxx.se/ca/cacert.pem */
|
||||||
"cafile" => __DIR__ . "/cacert.pem",
|
"cafile" => __DIR__ . "/cacert.pem",
|
||||||
"verify_peer" => true
|
"verify_peer" => true
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$result = fopen($url, "r", false, stream_context_create($options));
|
$result = fopen($url, "r", false, stream_context_create($options));
|
||||||
if ($result) {
|
if ($result) {
|
||||||
/* Compression was successful, retrieve output from Location header. */
|
/* Compression was successful, retrieve output from Location header. */
|
||||||
foreach ($http_response_header as $header) {
|
foreach ($http_response_header as $header) {
|
||||||
if (strtolower(substr($header, 0, 10)) === "location: ") {
|
if (strtolower(substr($header, 0, 10)) === "location: ") {
|
||||||
file_put_contents($output, fopen(substr($header, 10), "rb", false));
|
file_put_contents($output, fopen(substr($header, 10), "rb", false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Something went wrong! */
|
/* Something went wrong! */
|
||||||
print("Compression failed<br>");
|
print("Compression failed<br>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//get all files' fullname in $filedir
|
//get all files' fullname in $filedir
|
||||||
public function getFiles($filedir)
|
public function getFiles($filedir)
|
||||||
{
|
{
|
||||||
$files = [];
|
$files = [];
|
||||||
$dir = @dir($filedir);
|
$dir = @dir($filedir);
|
||||||
while (($file = $dir->read()) != false) {
|
while (($file = $dir->read()) != false) {
|
||||||
if ($file != "." and $file != "..") {
|
if ($file != "." and $file != "..") {
|
||||||
$files[] = $file;
|
$files[] = $file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$dir->close();
|
$dir->close();
|
||||||
return $files;
|
return $files;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
##
|
##
|
||||||
## Bundle of CA Root Certificates
|
## Bundle of CA Root Certificates
|
||||||
##
|
##
|
||||||
## Certificate data from Mozilla as of: Tue Apr 13 03:12:04 2021 GMT
|
## Certificate data from Mozilla as of: Mon Jul 5 21:35:54 2021 GMT
|
||||||
##
|
##
|
||||||
## This is a bundle of X.509 certificates of public Certificate Authorities
|
## This is a bundle of X.509 certificates of public Certificate Authorities
|
||||||
## (CA). These were automatically extracted from Mozilla's root certificates
|
## (CA). These were automatically extracted from Mozilla's root certificates
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
## Just configure this file as the SSLCACertificateFile.
|
## Just configure this file as the SSLCACertificateFile.
|
||||||
##
|
##
|
||||||
## Conversion done with mk-ca-bundle.pl version 1.28.
|
## Conversion done with mk-ca-bundle.pl version 1.28.
|
||||||
## SHA256: f377673fa3c22ba2188a4cea041c7b8c99a4817ffde6821e98325ce89324e5aa
|
## SHA256: c8f6733d1ff4e6a4769c182971a1234f95ae079247a9c439a13423fe8ba5c24f
|
||||||
##
|
##
|
||||||
|
|
||||||
|
|
||||||
|
@ -156,38 +156,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
|
||||||
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
QuoVadis Root CA
|
|
||||||
================
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
|
|
||||||
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
|
||||||
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
|
|
||||||
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
|
|
||||||
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
|
|
||||||
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
|
||||||
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
|
|
||||||
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
|
|
||||||
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
|
|
||||||
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
|
|
||||||
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
|
|
||||||
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
|
|
||||||
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
|
|
||||||
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
|
|
||||||
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
|
||||||
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
|
||||||
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
|
|
||||||
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
|
|
||||||
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
|
|
||||||
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
|
|
||||||
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
|
|
||||||
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
|
|
||||||
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
|
|
||||||
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
|
|
||||||
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
|
|
||||||
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
|
|
||||||
5nrQNiOKSnQ2+Q==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
QuoVadis Root CA 2
|
QuoVadis Root CA 2
|
||||||
==================
|
==================
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
|
@ -275,26 +243,6 @@ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
|
||||||
FL39vmwLAw==
|
FL39vmwLAw==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
Sonera Class 2 Root CA
|
|
||||||
======================
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
|
|
||||||
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
|
|
||||||
NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
|
|
||||||
IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
|
|
||||||
/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
|
|
||||||
dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
|
|
||||||
f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
|
|
||||||
tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
|
|
||||||
nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
|
|
||||||
XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
|
|
||||||
0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
|
|
||||||
cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
|
|
||||||
Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
|
|
||||||
EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
|
|
||||||
llpwrN9M
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
XRamp Global CA Root
|
XRamp Global CA Root
|
||||||
====================
|
====================
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
|
@ -893,82 +841,6 @@ Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
|
||||||
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
|
WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
Chambers of Commerce Root - 2008
|
|
||||||
================================
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
|
|
||||||
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
|
||||||
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
|
||||||
QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
|
|
||||||
Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
|
|
||||||
ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
|
|
||||||
EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
|
|
||||||
cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
|
|
||||||
AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
|
|
||||||
XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
|
|
||||||
h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
|
|
||||||
ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
|
|
||||||
NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
|
|
||||||
D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
|
|
||||||
lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
|
|
||||||
0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
|
|
||||||
ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
|
|
||||||
EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
|
|
||||||
G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
|
|
||||||
BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
|
|
||||||
bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
|
|
||||||
bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
|
|
||||||
CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
|
|
||||||
AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
|
|
||||||
wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
|
|
||||||
3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
|
|
||||||
RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
|
|
||||||
M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
|
|
||||||
YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
|
|
||||||
9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
|
|
||||||
zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
|
|
||||||
nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
|
|
||||||
OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
Global Chambersign Root - 2008
|
|
||||||
==============================
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
|
|
||||||
MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
|
|
||||||
bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
|
|
||||||
QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
|
|
||||||
NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
|
|
||||||
Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
|
|
||||||
QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
|
|
||||||
aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
|
|
||||||
VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
|
|
||||||
XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
|
|
||||||
ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
|
|
||||||
/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
|
|
||||||
TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
|
|
||||||
H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
|
|
||||||
Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
|
|
||||||
HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
|
|
||||||
wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
|
|
||||||
AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
|
|
||||||
BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
|
|
||||||
BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
|
|
||||||
aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
|
|
||||||
aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
|
|
||||||
1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
|
|
||||||
dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
|
|
||||||
/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
|
|
||||||
ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
|
|
||||||
dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
|
|
||||||
9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
|
|
||||||
foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
|
|
||||||
qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
|
|
||||||
P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
|
|
||||||
c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
|
|
||||||
09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
Go Daddy Root Certificate Authority - G2
|
Go Daddy Root Certificate Authority - G2
|
||||||
========================================
|
========================================
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
|
@ -1270,27 +1142,6 @@ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
|
||||||
vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
|
vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
Trustis FPS Root CA
|
|
||||||
===================
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
|
|
||||||
EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
|
|
||||||
IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
|
|
||||||
BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
|
|
||||||
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
|
|
||||||
RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
|
|
||||||
H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
|
|
||||||
cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
|
|
||||||
o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
|
|
||||||
AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
|
|
||||||
BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
|
|
||||||
GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
|
|
||||||
yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
|
|
||||||
8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
|
|
||||||
l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
|
|
||||||
iB6XzCGcKQENZetX2fNXlrtIzYE=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
Buypass Class 2 Root CA
|
Buypass Class 2 Root CA
|
||||||
=======================
|
=======================
|
||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
|
@ -3212,3 +3063,112 @@ gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk
|
||||||
vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
|
vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
|
||||||
CAezNIm8BZ/3Hobui3A=
|
CAezNIm8BZ/3Hobui3A=
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
GLOBALTRUST 2020
|
||||||
|
================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
ANF Secure Server Root CA
|
||||||
|
=========================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
Certum EC-384 CA
|
||||||
|
================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ
|
||||||
|
TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
|
||||||
|
dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2
|
||||||
|
MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh
|
||||||
|
dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
|
||||||
|
GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq
|
||||||
|
vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn
|
||||||
|
iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
|
||||||
|
VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo
|
||||||
|
ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0
|
||||||
|
QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
||||||
|
Certum Trusted Root CA
|
||||||
|
======================
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
|
@ -1,54 +1,54 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 压缩文件函数调用位置
|
* 压缩文件函数调用位置
|
||||||
*/
|
*/
|
||||||
require_once __DIR__ . '/../function.php';
|
require_once __DIR__ . '/../function.php';
|
||||||
require_once APP_ROOT . '/libs/compress/Imagick/class.Imgcompress.php';
|
require_once APP_ROOT . '/libs/compress/Imagick/class.Imgcompress.php';
|
||||||
require_once APP_ROOT . '/libs/compress/TinyImg/TinyImg.php';
|
require_once APP_ROOT . '/libs/compress/TinyImg/TinyImg.php';
|
||||||
require_once APP_ROOT . '/config/api_key.php';
|
require_once APP_ROOT . '/config/api_key.php';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $floder 文件夹
|
* @param string $floder 文件夹
|
||||||
* @param string 压缩方式Imgcompress / TinyImag
|
* @param string 压缩方式Imgcompress / TinyImag
|
||||||
*/
|
*/
|
||||||
function compress($floder, $type = 'Imgcompress', $source = '')
|
function compress($floder, $type = 'Imgcompress', $source = '')
|
||||||
{
|
{
|
||||||
global $Api_Key;
|
global $Api_Key;
|
||||||
global $config;
|
global $config;
|
||||||
ini_set('max_execution_time', '0'); // 脚本运行的时间(以秒为单位)0不限制
|
ini_set('max_execution_time', '0'); // 脚本运行的时间(以秒为单位)0不限制
|
||||||
|
|
||||||
if ($type == 'Imgcompress') {
|
if ($type == 'Imgcompress') {
|
||||||
|
|
||||||
$pic = getFile($floder); // 文件夹路径
|
$pic = getFile($floder); // 文件夹路径
|
||||||
foreach ($pic as $value) {
|
foreach ($pic as $value) {
|
||||||
$boxImg = $floder . $value;
|
$boxImg = $floder . $value;
|
||||||
// 跳过动态图片
|
// 跳过动态图片
|
||||||
if (!isAnimatedGif($boxImg)) {
|
if (!isAnimatedGif($boxImg)) {
|
||||||
$img = new Imgcompress($boxImg, 1);
|
$img = new Imgcompress($boxImg, 1);
|
||||||
$img->compressImg($boxImg);
|
$img->compressImg($boxImg);
|
||||||
echo '<pre>' . $boxImg . '</pre><br />';
|
echo '<pre>' . $boxImg . '</pre><br />';
|
||||||
// 释放
|
// 释放
|
||||||
ob_flush();
|
ob_flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($type == 'TinyImg') {
|
if ($type == 'TinyImg') {
|
||||||
if (empty($Api_Key['TinyImag'])) {
|
if (empty($Api_Key['TinyImag'])) {
|
||||||
exit('请先申请TinyImag key并保存再试!');
|
exit('请先申请TinyImag key并保存再试!');
|
||||||
}
|
}
|
||||||
$folder = '..' . $config['path'] . $source;
|
$folder = '..' . $config['path'] . $source;
|
||||||
$tinyImg = new TinyImg();
|
$tinyImg = new TinyImg();
|
||||||
$key = $Api_Key['TinyImag'];
|
$key = $Api_Key['TinyImag'];
|
||||||
$input = $folder; //这个文件夹下的文件会被压缩
|
$input = $folder; //这个文件夹下的文件会被压缩
|
||||||
$output = $folder; //压缩的结果会被保存到这个文件夹中
|
$output = $folder; //压缩的结果会被保存到这个文件夹中
|
||||||
$tinyImg->compressImgsFolder($key, $input, $output);
|
$tinyImg->compressImgsFolder($key, $input, $output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test
|
/* Test
|
||||||
$floder = 'D:/phpStudy/WWW/i/2021/05/09/';
|
$floder = 'D:/phpStudy/WWW/i/2021/05/09/';
|
||||||
compress($floder, 'TinyImg');
|
compress($floder, 'TinyImg');
|
||||||
echo 666;
|
echo 666;
|
||||||
*/
|
*/
|
|
@ -1,59 +1,59 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 压缩状态页面
|
* 压缩状态页面
|
||||||
*/
|
*/
|
||||||
require_once 'header.php';
|
require_once 'header.php';
|
||||||
require_once APP_ROOT . '/libs/compress/function.compress.php';
|
require_once APP_ROOT . '/libs/compress/function.compress.php';
|
||||||
|
|
||||||
// 检测登录
|
// 检测登录
|
||||||
if (!is_online()) {
|
if (!is_online()) {
|
||||||
checkLogin();
|
checkLogin();
|
||||||
}
|
}
|
||||||
// 文件夹压缩
|
// 文件夹压缩
|
||||||
if (isset($_POST['folder'])) {
|
if (isset($_POST['folder'])) {
|
||||||
|
|
||||||
$getFolder = urldecode($_POST['folder']);
|
$getFolder = urldecode($_POST['folder']);
|
||||||
|
|
||||||
$source = $_POST['folder'];
|
$source = $_POST['folder'];
|
||||||
|
|
||||||
$type = $_POST['type'];
|
$type = $_POST['type'];
|
||||||
|
|
||||||
$folder = '..' . $config['path'] . $getFolder;
|
$folder = '..' . $config['path'] . $getFolder;
|
||||||
|
|
||||||
if (!is_dir($folder)) {
|
if (!is_dir($folder)) {
|
||||||
exit($folder . '<script> new $.zui.Messager("没有这个文件夹!", {type: "danger" // 定义颜色主题
|
exit($folder . '<script> new $.zui.Messager("没有这个文件夹!", {type: "danger" // 定义颜色主题
|
||||||
}).show();</script>');
|
}).show();</script>');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 压缩前
|
// 压缩前
|
||||||
$sizeBefor = getDirectorySize($folder);
|
$sizeBefor = getDirectorySize($folder);
|
||||||
|
|
||||||
compress($folder, $type, $source);
|
compress($folder, $type, $source);
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<script> new $.zui.Messager("压缩完毕!", {type: "success" // 定义颜色主题
|
<script> new $.zui.Messager("压缩完毕!", {type: "success" // 定义颜色主题
|
||||||
}).show();</script>';
|
}).show();</script>';
|
||||||
}
|
}
|
||||||
// 压缩后
|
// 压缩后
|
||||||
$sizeAfter = getDirectorySize($folder);
|
$sizeAfter = getDirectorySize($folder);
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
<h2 style="text-align:center">压缩完毕</h2>
|
<h2 style="text-align:center">压缩完毕</h2>
|
||||||
<h4 style="text-align:center;">压缩前:<font color="red">' . getDistUsed($sizeBefor) . ' </font>压缩后:<font color="green">' . getDistUsed($sizeAfter) . '</font></h3>
|
<h4 style="text-align:center;">压缩前:<font color="red">' . getDistUsed($sizeBefor) . ' </font>压缩后:<font color="green">' . getDistUsed($sizeAfter) . '</font></h3>
|
||||||
<pre><h4>
|
<pre><h4>
|
||||||
无论使用哪种压缩均为不可逆操作,并且非常占用硬件资源。
|
无论使用哪种压缩均为不可逆操作,并且非常占用硬件资源。
|
||||||
|
|
||||||
如机器配置过低可能会导致CPU、内存飙升!
|
如机器配置过低可能会导致CPU、内存飙升!
|
||||||
|
|
||||||
<font color="red">Imgcompress</font> 自带压缩为轻微有损压缩图片 此压缩有可能使图片变大,特别是小图片!也有一定概率改变图片方向。
|
<font color="red">Imgcompress</font> 自带压缩为轻微有损压缩图片 此压缩有可能使图片变大,特别是小图片!也有一定概率改变图片方向。
|
||||||
|
|
||||||
<font color="red">Imgcompress</font> 对自身机器要求高,如图片过多会导致脚本崩溃或者超时(已经预处理超时和脚本崩溃处理,但是有概率重现)!
|
<font color="red">Imgcompress</font> 对自身机器要求高,如图片过多会导致脚本崩溃或者超时(已经预处理超时和脚本崩溃处理,但是有概率重现)!
|
||||||
|
|
||||||
<font color="red">TinyImag</font> 是 https://tinify.cn/ 提供的API,需要自行申请,对服务器要求较低,但是对网络要求高!如在国内可能导致非常慢而超时崩溃(已预处理,但是有概率重现)。
|
<font color="red">TinyImag</font> 是 https://tinify.cn/ 提供的API,需要自行申请,对服务器要求较低,但是对网络要求高!如在国内可能导致非常慢而超时崩溃(已预处理,但是有概率重现)。
|
||||||
|
|
||||||
获取TinyImag key https://tinify.cn/developers 并填入 <font color="red">/config/api_key.php</font> 文件。
|
获取TinyImag key https://tinify.cn/developers 并填入 <font color="red">/config/api_key.php</font> 文件。
|
||||||
</h4></pre>
|
</h4></pre>
|
||||||
';
|
';
|
||||||
|
|
||||||
include 'footer.php';
|
include 'footer.php';
|
||||||
|
|
200
libs/footer.php
200
libs/footer.php
|
@ -1,101 +1,101 @@
|
||||||
<!-- 对话框HTML -->
|
<!-- 对话框HTML -->
|
||||||
<div class="modal fade" id="myModal">
|
<div class="modal fade" id="myModal">
|
||||||
<div class="modal-dialog modal-sm">
|
<div class="modal-dialog modal-sm">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal">
|
<button type="button" class="close" data-dismiss="modal">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
<span class="sr-only">关闭</span></button>
|
<span class="sr-only">关闭</span></button>
|
||||||
<h4 class="modal-title icon icon-mobile" style="text-align: center">扫描二维码使用手机上传</h4>
|
<h4 class="modal-title icon icon-mobile" style="text-align: center">扫描二维码使用手机上传</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body" align="center">
|
<div class="modal-body" align="center">
|
||||||
<input id="text" type="hidden" value="" />
|
<input id="text" type="hidden" value="" />
|
||||||
<p id="qrcode"></p>
|
<p id="qrcode"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a class="btn btn-danger btn-sm" href="" target="_blank">访问</a>
|
<a class="btn btn-danger btn-sm" href="" target="_blank">访问</a>
|
||||||
<button type="button" class="btn btn-primary btn-sm" data-dismiss="modal">关闭</button>
|
<button type="button" class="btn btn-primary btn-sm" data-dismiss="modal">关闭</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
// js二维码 获取当前网址并赋值给id=text的value
|
// js二维码 获取当前网址并赋值给id=text的value
|
||||||
document.getElementById("text").value = window.location.href;
|
document.getElementById("text").value = window.location.href;
|
||||||
var qrcode = new QRCode(document.getElementById("qrcode"), {
|
var qrcode = new QRCode(document.getElementById("qrcode"), {
|
||||||
width: 200,
|
width: 200,
|
||||||
height: 200,
|
height: 200,
|
||||||
});
|
});
|
||||||
|
|
||||||
function makeCode() {
|
function makeCode() {
|
||||||
var elText = document.getElementById("text");
|
var elText = document.getElementById("text");
|
||||||
if (!elText.value) {
|
if (!elText.value) {
|
||||||
alert("Input a text");
|
alert("Input a text");
|
||||||
elText.focus();
|
elText.focus();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
qrcode.makeCode(elText.value);
|
qrcode.makeCode(elText.value);
|
||||||
}
|
}
|
||||||
makeCode();
|
makeCode();
|
||||||
$("#text").on("blur",
|
$("#text").on("blur",
|
||||||
function() {
|
function() {
|
||||||
makeCode();
|
makeCode();
|
||||||
}).on("keydown",
|
}).on("keydown",
|
||||||
function(e) {
|
function(e) {
|
||||||
if (e.keyCode == 13) {
|
if (e.keyCode == 13) {
|
||||||
makeCode();
|
makeCode();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// NProgress
|
// NProgress
|
||||||
$("body").show();
|
$("body").show();
|
||||||
$(".version").text(NProgress.version);
|
$(".version").text(NProgress.version);
|
||||||
NProgress.start();
|
NProgress.start();
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
NProgress.done();
|
NProgress.done();
|
||||||
$(".fade").removeClass("out");
|
$(".fade").removeClass("out");
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
|
||||||
$("#b-0").click(function() {
|
$("#b-0").click(function() {
|
||||||
NProgress.start();
|
NProgress.start();
|
||||||
});
|
});
|
||||||
$("#b-40").click(function() {
|
$("#b-40").click(function() {
|
||||||
NProgress.set(0.4);
|
NProgress.set(0.4);
|
||||||
});
|
});
|
||||||
$("#b-inc").click(function() {
|
$("#b-inc").click(function() {
|
||||||
NProgress.inc();
|
NProgress.inc();
|
||||||
});
|
});
|
||||||
$("#b-100").click(function() {
|
$("#b-100").click(function() {
|
||||||
NProgress.done();
|
NProgress.done();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<script src="../public/static/hm.js"></script>
|
<script src="../public/static/hm.js"></script>
|
||||||
<footer class="text-muted small col-md-12" style="text-align: center;margin-bottom: 10px"><?php echo showAD('bot'); ?>
|
<footer class="text-muted small col-md-12" style="text-align: center;margin-bottom: 10px"><?php echo showAD('bot'); ?>
|
||||||
<p><?php echo $config['customize']; ?></p>
|
<p><?php echo $config['customize']; ?></p>
|
||||||
|
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<p>请勿上传违反中国政策的图片<i class="icon icon-smile"></i> </p>
|
<p>请勿上传违反中国政策的图片<i class="icon icon-smile"></i> </p>
|
||||||
<div>
|
<div>
|
||||||
<!-- 对话框触发按钮 -->
|
<!-- 对话框触发按钮 -->
|
||||||
<a href="#" data-position="center" data-moveable="inside" data-moveable="true" data-toggle="modal" data-target="#myModal">
|
<a href="#" data-position="center" data-moveable="inside" data-moveable="true" data-toggle="modal" data-target="#myModal">
|
||||||
<i class="icon icon-qrcode"></i>二维码 </a>
|
<i class="icon icon-qrcode"></i>二维码 </a>
|
||||||
<a href="<?php echo $config['domain']; ?>/tinyfilemanager.php?p=<?php echo date('Y/m/d'); ?>" target="_blank"><i class="icon icon-desktop"></i>管理 </a>
|
<a href="<?php echo $config['domain']; ?>/tinyfilemanager.php?p=<?php echo date('Y/m/d'); ?>" target="_blank"><i class="icon icon-desktop"></i>管理 </a>
|
||||||
<a href="<?php echo $config['domain']; ?>/api/apiTest/" target="_blank"><i class="icon icon-key"></i>API </a>
|
<a href="<?php echo $config['domain']; ?>/api/apiTest/" target="_blank"><i class="icon icon-key"></i>API </a>
|
||||||
<?php
|
<?php
|
||||||
if (is_online()) {
|
if (is_online()) {
|
||||||
echo '
|
echo '
|
||||||
<a href="' . $config['domain'] . '/api/api-web.php" target="_blank"><i class="icon icon-rocket"></i>快捷操作 </a>
|
<a href="' . $config['domain'] . '/api/api-web.php" target="_blank"><i class="icon icon-rocket"></i>快捷操作 </a>
|
||||||
<a href="' . $config['domain'] . '/libs/logout.php" ><i class="icon icon-signout"></i>退出 </a>
|
<a href="' . $config['domain'] . '/libs/logout.php" ><i class="icon icon-signout"></i>退出 </a>
|
||||||
';
|
';
|
||||||
} else {
|
} else {
|
||||||
echo '<a href="' . $config['domain'] . '/libs/login.php" ><i class="icon icon-user"></i>登录 </a>';
|
echo '<a href="' . $config['domain'] . '/libs/login.php" ><i class="icon icon-user"></i>登录 </a>';
|
||||||
} ?>
|
} ?>
|
||||||
</div>
|
</div>
|
||||||
<?php echo 'Copyright © 2018-' . date('Y'); ?>
|
<?php echo 'Copyright © 2018-' . date('Y'); ?>
|
||||||
<a href="https://img.545141.com/" target="_blank">EasyImage</a> By
|
<a href="https://img.545141.com/" target="_blank">EasyImage</a> By
|
||||||
<a href="https://www.545141.com/902.html" target="_blank">Icret</a> Ver:<a href="https://github.com/icret/EasyImages2.0/releases" target="_blank"><?php echo $config['version']; ?> <i class="icon icon-github"></i><?php echo @getVersion(); ?></a>
|
<a href="https://www.545141.com/902.html" target="_blank">Icret</a> Ver:<a href="https://github.com/icret/EasyImages2.0/releases" target="_blank"><?php echo $config['version']; ?> <i class="icon icon-github"></i><?php echo @getVersion(); ?></a>
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
1010
libs/function.php
1010
libs/function.php
File diff suppressed because it is too large
Load Diff
105
libs/header.php
105
libs/header.php
|
@ -1,53 +1,54 @@
|
||||||
<?php require_once __DIR__ . '/function.php'; ?>
|
<?php
|
||||||
<!DOCTYPE html>
|
require_once __DIR__ . '/function.php';?>
|
||||||
<html lang="zh-cn">
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh-cn">
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
<head>
|
||||||
<title><?php echo $config['title']; ?></title>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<title><?php echo $config['title']; ?></title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="keywords" content="<?php echo $config['keywords']; ?>" />
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<meta name="description" content="<?php echo $config['description']; ?>" />
|
<meta name="keywords" content="<?php echo $config['keywords']; ?>" />
|
||||||
<link rel="shortcut icon" href="<?php echo $config['domain']; ?>/favicon.ico" type="image/x-icon" />
|
<meta name="description" content="<?php echo $config['description']; ?>" />
|
||||||
<?php echo static_cdn(); ?>
|
<link rel="shortcut icon" href="<?php echo $config['domain']; ?>/favicon.ico" type="image/x-icon" />
|
||||||
|
<?php echo static_cdn(); ?>
|
||||||
<style>
|
|
||||||
.uploader-files {
|
<style>
|
||||||
min-height: 160px;
|
.uploader-files {
|
||||||
border-style: dashed;
|
min-height: 160px;
|
||||||
}
|
border-style: dashed;
|
||||||
|
}
|
||||||
@media screen and (min-width:960px) {
|
|
||||||
.listNum img {
|
@media screen and (min-width:960px) {
|
||||||
width: 268px;
|
.listNum img {
|
||||||
height: 268px;
|
width: 268px;
|
||||||
}
|
height: 268px;
|
||||||
}
|
}
|
||||||
</style>
|
}
|
||||||
</head>
|
</style>
|
||||||
|
</head>
|
||||||
<body class="container">
|
|
||||||
<?php echo showAD('top'); ?>
|
<body class="container">
|
||||||
<div class="md-lg-12 header-dividing">
|
<?php echo showAD('top'); ?>
|
||||||
<ul class="nav nav-pills">
|
<div class="md-lg-12 header-dividing">
|
||||||
<li class="<?php echo getActive('index'); ?>">
|
<ul class="nav nav-pills">
|
||||||
<a href="<?php echo $config['domain']; ?>/index.php">
|
<li class="<?php echo getActive('index'); ?>">
|
||||||
<i class="icon icon-home"> 首页</i>
|
<a href="<?php echo $config['domain']; ?>/index.php">
|
||||||
</a>
|
<i class="icon icon-home"> 首页</i>
|
||||||
</li>
|
</a>
|
||||||
<li class="<?php echo getActive('list'); ?>">
|
</li>
|
||||||
<a href="<?php echo $config['domain']; ?>/libs/list.php?date=<?php echo date('Y/m/d/') ?>&num=<?php echo $config['listNumber']; ?>">
|
<li class="<?php echo getActive('list'); ?>">
|
||||||
<i class="icon icon-list"> 广场</i>
|
<a href="<?php echo $config['domain']; ?>/libs/list.php?date=<?php echo date('Y/m/d/') ?>&num=<?php echo $config['listNumber']; ?>">
|
||||||
<span class="label label-badge label-success">
|
<i class="icon icon-list"> 广场</i>
|
||||||
<?php echo getFileNumber(APP_ROOT . config_path()); ?></span>
|
<span class="label label-badge label-success">
|
||||||
</a>
|
<?php echo getFileNumber(APP_ROOT . config_path()); ?></span>
|
||||||
</li>
|
</a>
|
||||||
<li class="">
|
</li>
|
||||||
<a href="https://github.com/icret/easyImages2.0" target="_blank">
|
<li class="">
|
||||||
<i class="icon icon-github "> 源码下载</i>
|
<a href="https://github.com/icret/easyImages2.0" target="_blank">
|
||||||
</a>
|
<i class="icon icon-github "> 源码下载</i>
|
||||||
</li>
|
</a>
|
||||||
</ul>
|
</li>
|
||||||
</div>
|
</ul>
|
||||||
|
</div>
|
||||||
<!-- 顶部导航栏END -->
|
<!-- 顶部导航栏END -->
|
|
@ -1,9 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
require_once __DIR__ . '/header.php';
|
require_once __DIR__ . '/header.php';
|
||||||
|
|
||||||
|
|
||||||
if (!$config['showSwitch'] and !is_online()) {
|
if (!$config['showSwitch'] and !is_online()) {
|
||||||
echo '<p class="text-danger" style="center">管理员关闭了预览哦~~</p>';
|
echo '<div class="alert alert-info">管理员关闭了预览哦~~</div>';
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
$path = $_GET['date'] ?? date('Y/m/d/');
|
$path = $_GET['date'] ?? date('Y/m/d/');
|
||||||
|
@ -30,7 +28,7 @@ if (!$config['showSwitch'] and !is_online()) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
echo '<p class="text-danger" style="center">今天还没有上传的图片哟~~ <br />快来上传第一张吧~!</p>';
|
echo '<div class="alert alert-danger">今天还没有上传的图片哟~~ <br />快来上传第一张吧~!</div>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,32 +46,6 @@ $allUploud = getFileNumber(APP_ROOT . $config['path'] . $allUploud);
|
||||||
'num' => getFileNumber(APP_ROOT . config_path($path)),
|
'num' => getFileNumber(APP_ROOT . config_path($path)),
|
||||||
);
|
);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<script src="../public/static/lazyload.js"></script>
|
|
||||||
<link href="../public/static/zui/lib/datetimepicker/datetimepicker.min.css" rel="stylesheet">
|
|
||||||
<script src="../public/static/zui/lib/datetimepicker/datetimepicker.min.js"></script>
|
|
||||||
<div class="col-md-12">
|
|
||||||
<div class="col-md-6">
|
|
||||||
<a href="list.php"><span class="label label-success label-outline"> 今日上传:<?php echo $todayUpload; ?>张</span></a>
|
|
||||||
<a href="list.php?date=<?php echo $yesterday; ?>"><span class="label label-warning label-outline"> 昨日上传:<?php echo $yesterdayUpload; ?>张</span></a>
|
|
||||||
<a href="list.php?<?php echo http_build_query($httpUrl); ?>"><span class="label label-info label-outline"> 当前日期共上传:<?php echo $allUploud; ?>张</span></a>
|
|
||||||
<span class="label label-danger label-outline"> 存储占用:<?php echo $spaceUsed; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<form class="form-inline" action="list.php" method="get">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="exampleInputInviteCode3">按日期:</label>
|
|
||||||
<input type="text" class="form-control form-date" value="<?php echo date('Y/m/d/'); ?>" name="date" readonly="">
|
|
||||||
</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>
|
|
||||||
<style>
|
<style>
|
||||||
* {
|
* {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
@ -121,6 +93,31 @@ $allUploud = getFileNumber(APP_ROOT . $config['path'] . $allUploud);
|
||||||
z-index: 11;
|
z-index: 11;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
<script src="../public/static/lazyload.js"></script>
|
||||||
|
<link href="../public/static/zui/lib/datetimepicker/datetimepicker.min.css" rel="stylesheet">
|
||||||
|
<script src="../public/static/zui/lib/datetimepicker/datetimepicker.min.js"></script>
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<a href="list.php"><span class="label label-success label-outline"> 今日:<?php echo $todayUpload; ?>张</span></a>
|
||||||
|
<a href="list.php?date=<?php echo $yesterday; ?>"><span class="label label-warning label-outline"> 昨日:<?php echo $yesterdayUpload; ?>张</span></a>
|
||||||
|
<a href="list.php?<?php echo http_build_query($httpUrl); ?>"><span class="label label-info label-outline"> 当前上传:<?php echo $allUploud; ?>张</span></a>
|
||||||
|
<span class="label label-danger label-outline"> 占用:<?php echo $spaceUsed; ?></span>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<form class="form-inline" action="list.php" method="get">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="exampleInputInviteCode3">按日期:</label>
|
||||||
|
<input type="text" class="form-control form-date" value="<?php echo date('Y/m/d/'); ?>" name="date" readonly="">
|
||||||
|
</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>
|
||||||
<script>
|
<script>
|
||||||
// 返回顶部
|
// 返回顶部
|
||||||
$(function() {
|
$(function() {
|
||||||
|
|
|
@ -1,39 +1,39 @@
|
||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
* 登录页面
|
* 登录页面
|
||||||
*/
|
*/
|
||||||
require_once 'function.php';
|
require_once 'function.php';
|
||||||
require_once APP_ROOT . '/libs/header.php';
|
require_once APP_ROOT . '/libs/header.php';
|
||||||
// 提交登录
|
// 提交登录
|
||||||
if (isset($_POST['password'])) {
|
if (isset($_POST['password'])) {
|
||||||
checkLogin();
|
checkLogin();
|
||||||
Header("Location:../");
|
Header("Location:../");
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<center>
|
<center>
|
||||||
<div class="center" style="margin: 40px;">
|
<div class="center" style="margin: 40px;">
|
||||||
<form class="form-inline" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="return md5_post()">
|
<form class="form-inline" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" onsubmit="return md5_post()">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="has-success">
|
<div class="has-success">
|
||||||
<input type="password" name="password" id="password" class="form-control" placeholder="请输入登录密码">
|
<input type="password" name="password" id="password" class="form-control" placeholder="请输入登录密码">
|
||||||
</div>
|
</div>
|
||||||
<input type="hidden" name="password" id="md5_password">
|
<input type="hidden" name="password" id="md5_password">
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-primary">登录</button>
|
<button type="submit" class="btn btn-primary">登录</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</center>
|
</center>
|
||||||
<script src="../public/static/md5.min.js"></script>
|
<script src="../public/static/md5.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
function md5_post() {
|
function md5_post() {
|
||||||
var password = document.getElementById('password');
|
var password = document.getElementById('password');
|
||||||
var md5pwd = document.getElementById('md5_password');
|
var md5pwd = document.getElementById('md5_password');
|
||||||
md5pwd.value = md5(password.value);
|
md5pwd.value = md5(password.value);
|
||||||
//可以校验判断表单内容,true就是通过提交,false,阻止提交
|
//可以校验判断表单内容,true就是通过提交,false,阻止提交
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require_once APP_ROOT . '/libs/footer.php';
|
require_once APP_ROOT . '/libs/footer.php';
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
<?php
|
<?php
|
||||||
require_once 'header.php';
|
require_once 'header.php';
|
||||||
|
|
||||||
if (isset($_COOKIE['admin']) and $_COOKIE['admin'] == md5($config['password'])) {
|
if (isset($_COOKIE['admin']) and $_COOKIE['admin'] == md5($config['password'])) {
|
||||||
setcookie("admin", null, time() - 1, '/');
|
setcookie("admin", null, time() - 1, '/');
|
||||||
header("Refresh:2;url=../index.php");
|
header("Refresh:2;url=../index.php");
|
||||||
echo '
|
echo '
|
||||||
<script>
|
<script>
|
||||||
new $.zui.Messager("退出成功", {type: "success" // 定义颜色主题
|
new $.zui.Messager("退出成功", {type: "success" // 定义颜色主题
|
||||||
}).show();
|
}).show();
|
||||||
// 延时2s跳转
|
// 延时2s跳转
|
||||||
window.setTimeout("window.location=\'../index.php\'",2000);
|
window.setTimeout("window.location=\'../index.php\'",2000);
|
||||||
</script>
|
</script>
|
||||||
';
|
';
|
||||||
} else {
|
} else {
|
||||||
echo '
|
echo '
|
||||||
<script>
|
<script>
|
||||||
new $.zui.Messager("尚未登录", {type: "danger" // 定义颜色主题
|
new $.zui.Messager("尚未登录", {type: "danger" // 定义颜色主题
|
||||||
}).show();
|
}).show();
|
||||||
// 延时2s跳转
|
// 延时2s跳转
|
||||||
window.setTimeout("window.location=\'./login.php\'",2000);
|
window.setTimeout("window.location=\'./login.php\'",2000);
|
||||||
</script>
|
</script>
|
||||||
';
|
';
|
||||||
}
|
}
|
||||||
|
|
||||||
require_once 'footer.php';
|
require_once 'footer.php';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<!--顶部广告 按照这个范例替换相应链接,如果想多几个广告,就多复制几个-->
|
<!--顶部广告 按照这个范例替换相应链接,如果想多几个广告,就多复制几个-->
|
||||||
<div id="ad" class="col-md-12" align="center" style="padding:5px;">
|
<div id="ad" class="col-md-12" align="center" style="padding:5px;">
|
||||||
<a href="https://img.545141.com" target="_blank"><img src="public/ad.jpg" /></a>
|
<a href="https://img.545141.com" target="_blank"><img src="public/ad.jpg" /></a>
|
||||||
</div>
|
</div>
|
Binary file not shown.
After Width: | Height: | Size: 56 KiB |
Binary file not shown.
After Width: | Height: | Size: 55 KiB |
|
@ -1,179 +1,20 @@
|
||||||
(function () {
|
|
||||||
var root = (typeof self == 'object' && self.self == self && self) ||
|
(function(){var root=(typeof self=='object'&&self.self==self&&self)||(typeof global=='object'&&global.global==global&&global)||this||{};Function.prototype.bind=Function.prototype.bind||function(context){if(typeof this!=="function"){throw new Error("Function.prototype.bind - what is trying to be bound is not callable");}
|
||||||
(typeof global == 'object' && global.global == global && global) ||
|
var self=this;var args=Array.prototype.slice.call(arguments,1);var fNOP=function(){};var fBound=function(){var bindArgs=Array.prototype.slice.call(arguments);self.apply(this instanceof fNOP?this:context,args.concat(bindArgs));}
|
||||||
this || {};
|
fNOP.prototype=this.prototype;fBound.prototype=new fNOP();return fBound;}
|
||||||
|
var util={extend:function(target){for(var i=1,len=arguments.length;i<len;i++){for(var prop in arguments[i]){if(arguments[i].hasOwnProperty(prop)){target[prop]=arguments[i][prop]}}}
|
||||||
// 修复 bind 函数
|
return target},addEvent:function(elem,type,fn){if(document.addEventListener){elem.addEventListener(type,fn,false);return fn;}else if(document.attachEvent){var bound=function(){return fn.apply(elem,arguments)}
|
||||||
Function.prototype.bind = Function.prototype.bind || function (context) {
|
elem.attachEvent('on'+type,bound);return bound;}},removeEvent:function(elem,type,fn){if(document.removeEventListener){elem.removeEventListener(type,fn,false)}
|
||||||
|
else{elem.detachEvent("on"+type,fn)}}}
|
||||||
if (typeof this !== "function") {
|
function Lazy(opts){this.opts=util.extend({},this.constructor.defaultOpts,opts)
|
||||||
throw new Error("Function.prototype.bind - what is trying to be bound is not callable");
|
this.init();}
|
||||||
}
|
Lazy.VERSION='1.0.0';Lazy.defaultOpts={delay:250,useDebounce:false}
|
||||||
|
var proto=Lazy.prototype;proto.init=function(){this.calulateView();this.bindScrollEvent();};proto.calulateView=function(){this.view={top:0-(parseInt(this.opts.top,10)||0),bottom:(root.innerHeight||document.documentElement.clientHeight)+(parseInt(this.opts.bottom,10)||0),left:0-(parseInt(this.opts.left,10)||0),right:(root.innerWidth||document.documentElement.clientWidth)+(parseInt(this.opts.right,10)||0)}};proto.bindScrollEvent=function(){var scrollEvent=util.addEvent(root,'scroll',this.handleLazyLoad.bind(this))
|
||||||
var self = this;
|
var loadEvent=util.addEvent(root,'load',this.handleLazyLoad.bind(this))
|
||||||
var args = Array.prototype.slice.call(arguments, 1);
|
this.event={scrollEvent:scrollEvent,loadEvent:loadEvent}};var timer=null;proto.handleLazyLoad=function(){var self=this;if(!this.opts.useDebounce&&!!timer){return;}
|
||||||
|
clearTimeout(timer);timer=setTimeout(function(){timer=null;self.render()},this.opts.delay);};proto.isHidden=function(element){return(element.offsetParent===null);};proto.checkInView=function(element){if(this.isHidden(element)){return false;}
|
||||||
var fNOP = function () { };
|
var rect=element.getBoundingClientRect();return(rect.right>=this.view.left&&rect.bottom>=this.view.top&&rect.left<=this.view.right&&rect.top<=this.view.bottom);};proto.render=function(){var nodes=document.querySelectorAll('[data-image], [data-lazy-background]');var length=nodes.length;for(var i=0;i<length;i++){elem=nodes[i];if(this.checkInView(elem)){if(elem.getAttribute('data-lazy-background')!==null){elem.style.backgroundImage='url('+elem.getAttribute('data-lazy-background')+')';}else if(elem.src!==(src=elem.getAttribute('data-image'))){elem.src=src;}
|
||||||
|
elem.removeAttribute('data-image');elem.removeAttribute('data-lazy-background');if(this.opts.onload&&typeof this.opts.onload==='function'){this.opts.onload(elem);}}}
|
||||||
var fBound = function () {
|
if(!length){this.unbindScrollEvent();}};proto.unbindScrollEvent=function(){util.removeEvent(root,'scroll',this.event.scrollEvent)
|
||||||
var bindArgs = Array.prototype.slice.call(arguments);
|
util.removeEvent(root,'load',this.event.loadEvent)};if(typeof exports!='undefined'&&!exports.nodeType){if(typeof module!='undefined'&&!module.nodeType&&module.exports){exports=module.exports=Lazy;}
|
||||||
self.apply(this instanceof fNOP ? this : context, args.concat(bindArgs));
|
exports.Lazy=Lazy;}else{root.Lazy=Lazy;}}());
|
||||||
}
|
|
||||||
|
|
||||||
fNOP.prototype = this.prototype;
|
|
||||||
fBound.prototype = new fNOP();
|
|
||||||
return fBound;
|
|
||||||
}
|
|
||||||
|
|
||||||
var util = {
|
|
||||||
extend: function (target) {
|
|
||||||
for (var i = 1, len = arguments.length; i < len; i++) {
|
|
||||||
for (var prop in arguments[i]) {
|
|
||||||
if (arguments[i].hasOwnProperty(prop)) {
|
|
||||||
target[prop] = arguments[i][prop]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return target
|
|
||||||
},
|
|
||||||
addEvent: function (elem, type, fn) {
|
|
||||||
if (document.addEventListener) {
|
|
||||||
elem.addEventListener(type, fn, false);
|
|
||||||
return fn;
|
|
||||||
} else if (document.attachEvent) {
|
|
||||||
var bound = function () {
|
|
||||||
return fn.apply(elem, arguments)
|
|
||||||
}
|
|
||||||
elem.attachEvent('on' + type, bound);
|
|
||||||
return bound;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
removeEvent: function (elem, type, fn) {
|
|
||||||
if (document.removeEventListener) {
|
|
||||||
elem.removeEventListener(type, fn, false)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
elem.detachEvent("on" + type, fn)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function Lazy(opts) {
|
|
||||||
|
|
||||||
this.opts = util.extend({}, this.constructor.defaultOpts, opts)
|
|
||||||
|
|
||||||
this.init();
|
|
||||||
}
|
|
||||||
|
|
||||||
Lazy.VERSION = '1.0.0';
|
|
||||||
|
|
||||||
Lazy.defaultOpts = {
|
|
||||||
delay: 250,
|
|
||||||
useDebounce: false
|
|
||||||
}
|
|
||||||
|
|
||||||
var proto = Lazy.prototype;
|
|
||||||
|
|
||||||
proto.init = function () {
|
|
||||||
|
|
||||||
this.calulateView();
|
|
||||||
|
|
||||||
this.bindScrollEvent();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
proto.calulateView = function () {
|
|
||||||
|
|
||||||
this.view = {
|
|
||||||
top: 0 - (parseInt(this.opts.top, 10) || 0),
|
|
||||||
bottom: (root.innerHeight || document.documentElement.clientHeight) + (parseInt(this.opts.bottom, 10) || 0),
|
|
||||||
left: 0 - (parseInt(this.opts.left, 10) || 0),
|
|
||||||
right: (root.innerWidth || document.documentElement.clientWidth) + (parseInt(this.opts.right, 10) || 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
proto.bindScrollEvent = function () {
|
|
||||||
var scrollEvent = util.addEvent(root, 'scroll', this.handleLazyLoad.bind(this))
|
|
||||||
var loadEvent = util.addEvent(root, 'load', this.handleLazyLoad.bind(this))
|
|
||||||
|
|
||||||
this.event = {
|
|
||||||
scrollEvent: scrollEvent,
|
|
||||||
loadEvent: loadEvent
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var timer = null;
|
|
||||||
|
|
||||||
proto.handleLazyLoad = function () {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
if (!this.opts.useDebounce && !!timer) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
clearTimeout(timer);
|
|
||||||
|
|
||||||
timer = setTimeout(function () {
|
|
||||||
timer = null;
|
|
||||||
self.render()
|
|
||||||
}, this.opts.delay);
|
|
||||||
};
|
|
||||||
|
|
||||||
proto.isHidden = function (element) {
|
|
||||||
return (element.offsetParent === null);
|
|
||||||
};
|
|
||||||
|
|
||||||
proto.checkInView = function (element) {
|
|
||||||
if (this.isHidden(element)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var rect = element.getBoundingClientRect();
|
|
||||||
|
|
||||||
return (rect.right >= this.view.left && rect.bottom >= this.view.top && rect.left <= this.view.right && rect.top <= this.view.bottom);
|
|
||||||
};
|
|
||||||
|
|
||||||
proto.render = function () {
|
|
||||||
var nodes = document.querySelectorAll('[data-image], [data-lazy-background]');
|
|
||||||
var length = nodes.length;
|
|
||||||
|
|
||||||
for (var i = 0; i < length; i++) {
|
|
||||||
elem = nodes[i];
|
|
||||||
if (this.checkInView(elem)) {
|
|
||||||
|
|
||||||
if (elem.getAttribute('data-lazy-background') !== null) {
|
|
||||||
elem.style.backgroundImage = 'url(' + elem.getAttribute('data-lazy-background') + ')';
|
|
||||||
} else if (elem.src !== (src = elem.getAttribute('data-image'))) {
|
|
||||||
elem.src = src;
|
|
||||||
}
|
|
||||||
|
|
||||||
elem.removeAttribute('data-image');
|
|
||||||
elem.removeAttribute('data-lazy-background');
|
|
||||||
|
|
||||||
if (this.opts.onload && typeof this.opts.onload === 'function') {
|
|
||||||
this.opts.onload(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!length) {
|
|
||||||
this.unbindScrollEvent();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
proto.unbindScrollEvent = function () {
|
|
||||||
util.removeEvent(root, 'scroll', this.event.scrollEvent)
|
|
||||||
util.removeEvent(root, 'load', this.event.loadEvent)
|
|
||||||
};
|
|
||||||
|
|
||||||
if (typeof exports != 'undefined' && !exports.nodeType) {
|
|
||||||
if (typeof module != 'undefined' && !module.nodeType && module.exports) {
|
|
||||||
exports = module.exports = Lazy;
|
|
||||||
}
|
|
||||||
exports.Lazy = Lazy;
|
|
||||||
} else {
|
|
||||||
root.Lazy = Lazy;
|
|
||||||
}
|
|
||||||
}());
|
|
Loading…
Reference in New Issue