pull/18/head
icret 2022-02-02 03:28:06 +08:00
parent 2eee083a66
commit c2c6eb3a12
8 changed files with 194 additions and 127 deletions

View File

@ -44,7 +44,7 @@
2. 对`PHP`不太熟悉的请不要将图床程序放置于二级目录
3. 请关闭防跨站或删除域名文件夹内的`user.ini`文件 如宝塔面板
4. 网站域名与图片域名必须填写,如果只有一个域名请填写成一样的
5. 第一使用会执行安装程序并生成`install.lock` 不执行安装可以删除`install`目录
5. 第一使用会执行安装程序并生成`install.lock` 不执行安装可以删除`install`目录
6. 第一次访问会检查环境并在`config`目录下生成`EasyImage.lock`
7. 可以使用谷歌浏览器的调试模式查看错误`F12->console`
8. 出现`undefined function imagecreatefromwebp()`是因为GD没安装webp
@ -104,6 +104,8 @@ $HTTP["url"] =~ "^/(i|public)/" {
- 修复无可疑图片时显示错误
- 修复开启登录上传后无法上传的bug
- 增加安装时检测.user.ini
- 增加检测鉴黄接口是否可以正确访问
- 将插件检测等敏感信息转义到管理目录
- 增加 [nsfwjs](https://github.com/infinitered/nsfwjs) 接口方式检测违规图片
- 作者测试时用的`docker`搭建 `docker`地址:[zengdawei/nsfw_restful_api
](https://hub.docker.com/r/zengdawei/nsfw_restful_api)

View File

@ -823,6 +823,7 @@ if (isset($_GET['reimg'])) {
<link href="<?php static_cdn(); ?>/public/static/zui/lib/datetimepicker/datetimepicker.min.css" rel="stylesheet">
<script src="<?php static_cdn(); ?>/public/static/zui/lib/datetimepicker/datetimepicker.min.js"></script>
<script src="<?php static_cdn(); ?>/public/static/md5.min.js"></script>
<?php /** 引入空间检测文件 */ if ($config['checkEnv']) require_once APP_ROOT . '/application/check_admin.inc.php'; ?>
<script>
// tips提示
$('[data-toggle="tooltip"]').tooltip({

View File

@ -1,115 +1,87 @@
<?php
require_once __DIR__ . '/function.php';
// global $config;
// 跳转安装
if (!is_file(APP_ROOT . '/install/install.lock') and is_file(APP_ROOT . '/install/install.php')) {
echo '<script type="text/javascript">window.location.href="' . get_whole_url('/') . '/install/index.php"</script>';
}
/**
* 检测弹窗内容
*/
global $config;
// 扩展检测
$expand = array('fileinfo', 'iconv', 'gd', 'mbstring', 'openssl',);
foreach ($expand as $val) {
if (!extension_loaded($val)) {
echo '
<script>
new $.zui.Messager("扩展:' . $val . '- 未安装,可能导致图片上传失败! 请尽快修复。", {
type: "black", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
</script>
';
}
}
// 检测是否更改默认域名
if (strstr('localhost|127.0.0.1', $_SERVER['HTTP_HOST'])) {
echo '
<script>
new $.zui.Messager("请修改默认域名,可能会导致网站访问异常! ", {type: "black" // 定义颜色主题
}).show();
</script>
';
}
// 检测是否修改默认密码
if ($config['password'] === 'e6e061838856bf47e1de730719fb2609') {
echo '
<script>
new $.zui.Messager("请修改默认密码,否则会有泄露风险! ", {type: "warning" // 定义颜色主题
}).show();
</script>
';
}
// 上部内容
if (!is_file(APP_ROOT . '/config/EasyIamge.lock')) {
echo '
<div class="modal fade" id="myModal-1">
<div class="modal-dialog">
<div class="modal-content">
if (is_file(APP_ROOT . '/config/EasyIamge.lock')) exit; // 查询锁定弹窗文件是否存在
file_put_contents(APP_ROOT . '/config/EasyIamge.lock', '安装环境检测锁定文件,如需再次展示请删除此文件!', FILE_APPEND | LOCK_EX);
clearstatcache();
?>
<div class="modal fade" id="myModal-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">
<i class="icon icon-heart"> </i><a href="https://blog.png.cm/846.html" target="_blank">简单图床-EasyImage2.0</a> 安装环境检测</h4>
<i class="icon icon-heart"> </i><a href="https://blog.png.cm/902.html" target="_blank">简单图床-EasyImage2.0</a> 安装环境检测
</h4>
</div>
<div class="modal-body">
<h4>说明:</h4>
<h5>1. 建议使用<font color="red">PHP7.0</font>及以上版本;</h5>
<h5>2. 上传失败大部分是由于<font color="red">upload_max_filesize、post_max_size、文件权限</font>设置不正确;</h5>
<h5>3. 本程序主要用到<font color="red">Fileinfo、GD、Openssl</font>扩展,如果缺失会导致无法访问管理面板以及上传/删除图片。</h5>
<h5>1. 建议使用<span style="color:red">PHP7.0</span>及以上版本;</h5>
<h5>2. 上传失败大部分是由于<span style="color:red">upload_max_filesize、post_max_size、文件权限</span>设置不正确;</h5>
<h5>3. 本程序主要用到<span style="color:red">Fileinfo、GD、Openssl</span>扩展,如果缺失会导致无法访问管理面板以及上传/删除图片。</h5>
<hr />
<h4>EasyImage2.0 基础检测:</h4>
当前PHP版本:<font style="color:green">' . phpversion() . '</font><br/>';
echo '<font color="green">upload_max_filesize</font> - PHP上传最大值:' . ini_get('upload_max_filesize');
echo '<br /><font color="green">post_max_size</font> - POST上传最大值:' . ini_get('post_max_size') . '<br />';
// 扩展检测
$expand = array('fileinfo', 'gd', 'openssl', 'imagick');
foreach ($expand as $val) {
if (extension_loaded($val)) {
echo '
<font color="green">' . $val . "</font> - 已安装
<br />";
} else {
echo "
<script language='javascript'>alert('$val - 未安装')</script>";
echo '
<font color="red">' . $val . " - 未安装</font>
<br />";
}
}
// 文件权限检测
$quanxian = substr(base_convert(fileperms("file.php"), 10, 8), 3);
if (IS_WIN) {
echo '
<font style="color:green">file.php 文件可执行</font><br/>
<font style="color:green">/i 目录可读写</font><br/>
';
}
if (!IS_WIN) {
if ($quanxian !== '755' and !is_writable(APP_ROOT . '/i/')) {
echo '
<p style="color:red">file.php 文件不可执行</font>><br/>
<p style="color:red">/i 目录可读写</font>><br/>
';
} else {
echo '
<font style="color:green">file.php 文件可执行</font><br/>
<font style="color:green">/i 目录可读写</font><br/>
';
}
}
echo '</div>
<p>当前PHP版本:<sapn style="color:green"><?php echo phpversion() ?></sapn>
</p>
<p>upload_max_filesize - PHP上传最大值:<sapn style="color:green"><?php echo ini_get('upload_max_filesize'); ?></sapn>
</p>
<p>post_max_size - POST上传最大值:<sapn style="color:green"><?php echo ini_get('post_max_size'); ?></sapn>
</p>
<?php
// 扩展检测
$expand = array('fileinfo', 'gd', 'openssl', 'imagick');
foreach ($expand as $val) {
if (extension_loaded($val)) {
echo '
<p style="color:green">' . $val . " - 已安装</p>";
} else {
echo "<script language='javascript'>alert('$val - 未安装')</script>";
echo '<p style="color:red">' . $val . " - 未安装</p>";
}
}
// 文件权限检测
$quanxian = substr(base_convert(fileperms("file.php"), 10, 8), 3);
if (IS_WIN) {
echo '
<p style="color:green">file.php 文件可执行</p>
<p style="color:green">/i 目录可读写</p>
';
}
if (!IS_WIN) {
if ($quanxian !== '755' and !is_writable(APP_ROOT . '/i/')) {
echo '
<p style="color:red">file.php 文件不可执行</font>>
<p style="color:red">/i 目录可读写</font>>
';
} else {
echo '
<p style="color:green">file.php 文件可执行</p>
<p style="color:green">/i 目录可读写</p>
';
}
}
?>
</div>
<div class="modal-footer" style="text-align:left">
<p class="text-primary">安装环境检测弹窗仅在第一次访问主页时展示,弹出后会在<code>config</code>目录下生成<code>EasyIamge.lock</code>文件,如需再次弹出请删除<code>EasyIamge.lock</code>文件。</p>
<p class="text-primary">刷新或按<kbd>ESC</kbd>关闭安装环境检测弹窗。</p>
<p class="text-primary">安装环境检测弹窗仅在第一次访问主页时展示,弹出后会在<code>config</code>目录下生成<code>EasyIamge.lock</code>文件,如需再次弹出请删除<code>EasyIamge.lock</code>文件。</p>
<p class="text-primary">刷新或按<kbd>ESC</kbd>关闭安装环境检测弹窗。</p>
</div>
</div>
</div>
</div>
<script>
$("#myModal-1").modal({
keyboard: true,
moveable: true,
backdrop: "static",//点击空白处不关闭对话框
show: true
})
alert("初次打开会检测环境配置,请仔细看!!");
</script>
';
file_put_contents(APP_ROOT . '/config/EasyIamge.lock', '安装环境检测锁定文件,如需再次展示请删除此文件!', FILE_APPEND | LOCK_EX);
clearstatcache();
}
<script>
$("#myModal-1").modal({
keyboard: true,
moveable: true,
backdrop: "static", //点击空白处不关闭对话框
show: true
})
alert("初次打开会检测环境配置,请仔细看!!");
</script>

79
application/check_admin.inc.php Executable file
View File

@ -0,0 +1,79 @@
<?php
// 扩展检测
$expand = array('fileinfo', 'iconv', 'gd', 'mbstring', 'openssl',);
foreach ($expand as $val) {
if (!extension_loaded($val)) {
echo '
<script>
new $.zui.Messager("扩展:' . $val . '- 未安装,可能导致图片上传失败! 请尽快修复。",{
type: "black", // 定义颜色主题
icon: "exclamation-sign" // 定义消息图标
}).show();
</script>
';
}
}
// 检测是否更改默认域名
if (strstr('localhost|127.0.0.1', $_SERVER['HTTP_HOST'])) {
echo '
<script>
new $.zui.Messager("请修改默认域名,可能会导致网站访问异常! ",{
type: "black" // 定义颜色主题
}).show();
</script>
';
}
// 检测是否修改默认密码
if ($config['password'] === 'e6e061838856bf47e1de730719fb2609') {
echo '
<script>
new $.zui.Messager("请修改默认密码,否则会有泄露风险! ",{
type: "warning" // 定义颜色主题
}).show();
</script>
';
}
// 检测监黄接口是否可以访问
if ($configp['checkImg'] !== 0) {
if ($config['checkImg'] == 1) {
if (!@IP_URL_Ping('api.moderatecontent.com', 80, 1)) {
echo '
<script>
new $.zui.Messager("moderatecontent 鉴黄接口无法ping通! ",{
type: "warning" // 定义颜色主题
}).show();
</script>
';
}
}
if ($config['checkImg'] == 2) {
$ip = parse_url($config['nsfwjs_url'])['host'];
$port = parse_url($config['nsfwjs_url'])['port'];
if (filter_var($ip, FILTER_VALIDATE_IP)) {
if (!@IP_URL_Ping($ip, $port, 1)) {
echo '
<script>
new $.zui.Messager("' . $ip . $port . ' 鉴黄接口无法ping通! ",{
type: "warning" // 定义颜色主题
}).show();
</script>
';
}
} else {
if (!@IP_URL_Ping($ip, 80, 1)) {
echo '
<script>
new $.zui.Messager("' . $ip . ' 鉴黄接口无法ping通! ",{
type: "warning" // 定义颜色主题
}).show();
</script>
';
}
}
}
}

View File

@ -39,10 +39,8 @@
</p>
</footer>
<?php
// 环境检测
checkEnv($config['checkEnv']);
?>
<?php /** 环境检测 */ if ($config['checkEnv']) require_once APP_ROOT . '/application/check.php'; ?>
<script>
// js 获取当前网址二维码
var qrcode = new QRCode(document.getElementById("qrcode"), {

View File

@ -582,7 +582,6 @@ function deldir($dir)
}
}
/**
* 图片监黄curl 访问网站并返回解码过的json信息
* @param $img string 图片url
@ -745,7 +744,6 @@ function re_checkImg($name)
}
}
/**
* 创建缩略图
* @param $imgName string 需要创建缩略图的名称
@ -1049,3 +1047,21 @@ function checkIP($ipNow = null, $ipList = null, $model = false)
return true;
}
}
/**
* 测试IP或者url是否可以ping通
* @param $host string ip或网址
* @param $port int 端口
* @param $timeout float 过期时间
* @return bool true|false
*/
function IP_URL_Ping($host, $port, $timeout)
{
$errno = 444;
$errstr = 'fSockOpen 错误';
$fP = fSockOpen($host, $port, $errno, $errstr, $timeout);
if (!$fP) {
return false;
}
return true;
}

View File

@ -4,8 +4,8 @@ $config=Array
'title'=>'简单图床 - EasyImage',
'keywords'=>'简单图床,easyimage,无数据库图床,PHP多图长传程序,自适应页面,HTML5,markdown,bbscode,一键复制',
'description'=>'简单图床EasyImage是一款支持多文件上传的无数据库图床,可以完美替代PHP多图上传程序最新html5自适应页面兼容手机电脑上传后返回图片直链markdown图片论坛贴图bbscode链接简单方便支持一键复制支持多域名api上传。',
'tips'=>'<a><li class="icon icon-bullhorn text-muted"> 单文件≤10M单次上传≤30张</li></a>
<a href="https://github.com/icret/EasyImages2.0" target="_black"><i class="icon icon-heart"> 简单图床是一款开源图床, 支持多文件上传无数据库</i></a>
'tips'=>'<a><li class="icon icon-bullhorn text-muted"> 单文件≤10M单次上传≤30张</li></a>
<a href="https://github.com/icret/EasyImages2.0" target="_black"><i class="icon icon-heart"> 简单图床是一款开源图床, 支持多文件上传无数据库</i></a>
<a href="https://github.com/icret/EasyImages2.0" target="_black"><i class="icon icon-github"> 如果你喜欢这种图床风格就下载喔 (๑•̀ㅂ•́)و✧</i></a>',
'domain'=>'http://127.0.0.1',
'imgurl'=>'http://127.0.0.1',
@ -46,18 +46,17 @@ $config=Array
'checkImg'=>0,
'checkImg_value'=>50,
'moderatecontent_key'=>'',
'nsfwjs_url'=>'http://172.17.0.2:3307/api/nsfw/classify?url=',
'footer'=>'<a href="/admin/terms.php" target="_blank">请勿上传违反中国政策的图片</a>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?c790ac2bdc2f385757ecd0183206108d";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
',
'nsfwjs_url'=>'',
'footer'=>'<a href="/admin/terms.php" target="_blank">请勿上传违反中国政策的图片</a>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?c790ac2bdc2f385757ecd0183206108d";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>',
'ad_top'=>0,
'ad_top_info'=>' <!--广告 按照这个范例替换相应链接,如果想多几个广告,就多复制几个-->
<div class="col-md-12" style="text-align: center;margin:2px;">
@ -82,5 +81,5 @@ var _hmt = _hmt || [];
'check_ip_model'=>0,
'check_ip_list'=>'',
'version'=>'2.4.8',
'form'=>'2022-02-01 03:21:02'
'form'=>'2022-02-02 03:25:00'
);

View File

@ -78,22 +78,22 @@ function checkPASS($name)
</tr>
<tr>
<td>Fileinfo</td>
<td>必须支持</td>
<td>必须支持 | 安装后重启PHP</td>
<td> <?php checkPASS($fileinfo); ?></td>
</tr>
<tr>
<td>GD</td>
<td>必须支持</td>
<td>必须支持 | 安装后重启PHP</td>
<td> <?php checkPASS($gd); ?></td>
</tr>
<tr>
<td>openssl</td>
<td>建议支持(用于删除文件,PHP>7.0</td>
<td>建议支持 | 生成加密删除url,需PHP>7.0</td>
<td> <?php checkPASS($openssl); ?></td>
</tr>
<tr>
<td>file.php</td>
<td>0755可执行权限非windows系统</td>
<td>0755可执行权限 | 非windows系统</td>
<td> <?php checkPASS($file_php); ?></td>
</tr>
<tr>
@ -103,7 +103,7 @@ function checkPASS($name)
</tr>
<tr>
<td>.user.ini</td>
<td>止跨目录访问和读取文件-><a href="https://lnmp.org/faq/lnmp-vhost-add-howto.html#user.ini" target="_blank">删除方法</a></td>
<td>跨目录读写文件 | 删除方法:<a href="https://lnmp.org/faq/lnmp-vhost-add-howto.html#user.ini" target="_blank"> LNMP</a> | <a href="https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=36605&page=1#pid122035" target="_blank">BT宝塔</a></td>
<td><?php checkPASS($userINI); ?></td>
</tr>
</tbody>