From 06eb605e9a8f1c0d6e13402e67acb94a58ce9ed1 Mon Sep 17 00:00:00 2001
From: "MI15\\Win" <10359480+tznb@user.noreply.gitee.com>
Date: Sat, 16 Sep 2023 23:26:09 +0800
Subject: [PATCH] v2.0.40-20230916
---
README.md | 1 -
data/README.md | 1 +
data/temp/README.md | 1 +
data/user/README.md | 1 +
rewrite.php | 3 -
system/UseFew/local_backup.php | 349 +-------------
system/admin.php | 96 ----
system/api.php | 300 +-----------
system/api_article.php | 222 +--------
system/api_root.php | 429 ++----------------
system/expand/apply.php | 131 +-----
system/expand/guestbook.php | 76 +---
system/expand/sitemap.php | 46 --
system/expand/sitemap_create.php | 148 ------
system/public.php | 26 +-
system/version.txt | 2 +-
templates/admin/js/public.js | 4 +
templates/admin/other/verify_link_pwd.php | 91 ----
templates/admin/other/verify_pwd2.php | 90 ----
templates/admin/other/verify_share_pwd.php | 88 ----
templates/admin/page/expand/apply-admin.php | 8 +-
templates/admin/page/expand/apply-user.php | 13 +-
templates/admin/page/expand/article-edit.php | 24 +-
templates/admin/page/expand/article-list.php | 146 +-----
.../admin/page/expand/guestbook-admin.php | 21 +-
templates/admin/page/expand/sitemap.php | 23 +-
templates/admin/page/home.php | 17 +-
templates/admin/page/root/mail_set.php | 27 +-
templates/admin/page/root/tool.php | 5 +-
templates/admin/page/root/vip.php | 22 +-
templates/admin/page/theme_article.php | 83 ----
templates/admin/page/theme_guide.php | 84 ----
templates/admin/page/theme_home.php | 94 ----
templates/admin/page/theme_login.php | 87 ----
templates/admin/page/theme_register.php | 86 ----
templates/admin/page/theme_transit.php | 89 ----
templates/admin/page/updatelog.php | 11 +-
37 files changed, 162 insertions(+), 2783 deletions(-)
create mode 100644 data/README.md
create mode 100644 data/temp/README.md
create mode 100644 data/user/README.md
delete mode 100644 system/expand/sitemap.php
delete mode 100644 system/expand/sitemap_create.php
delete mode 100644 templates/admin/other/verify_link_pwd.php
delete mode 100644 templates/admin/other/verify_pwd2.php
delete mode 100644 templates/admin/other/verify_share_pwd.php
delete mode 100644 templates/admin/page/theme_article.php
delete mode 100644 templates/admin/page/theme_guide.php
delete mode 100644 templates/admin/page/theme_home.php
delete mode 100644 templates/admin/page/theme_login.php
delete mode 100644 templates/admin/page/theme_register.php
delete mode 100644 templates/admin/page/theme_transit.php
diff --git a/README.md b/README.md
index afab7ab..b02ed6e 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,6 @@ TwoNav 是一款开源的书签(导航)管理程序,界面简洁,安装
- **演示站**: [http://two.lm21.top](http://two.lm21.top)
- **仅供体验,定期清理数据** 账号密码`admin`
-
### 相关文档
* [安装教程](https://gitee.com/tznb/TwoNav/wikis/pages?sort_id=7968668&doc_id=3767990) | [使用说明](https://gitee.com/tznb/TwoNav/wikis) | [下载TwoNav](https://gitee.com/tznb/TwoNav/releases)
* [OneNav Extend 升级到 TwoNav](https://gitee.com/tznb/OneNav/wikis/pages?sort_id=7955135&doc_id=2439895)
diff --git a/data/README.md b/data/README.md
new file mode 100644
index 0000000..c05f6ff
--- /dev/null
+++ b/data/README.md
@@ -0,0 +1 @@
+用户数据目录,请勿随意删除!
\ No newline at end of file
diff --git a/data/temp/README.md b/data/temp/README.md
new file mode 100644
index 0000000..69e30d7
--- /dev/null
+++ b/data/temp/README.md
@@ -0,0 +1 @@
+临时目录,可以删除
\ No newline at end of file
diff --git a/data/user/README.md b/data/user/README.md
new file mode 100644
index 0000000..c05f6ff
--- /dev/null
+++ b/data/user/README.md
@@ -0,0 +1 @@
+用户数据目录,请勿随意删除!
\ No newline at end of file
diff --git a/rewrite.php b/rewrite.php
index 86967a7..afbb518 100644
--- a/rewrite.php
+++ b/rewrite.php
@@ -17,9 +17,6 @@ if (URI === '/login' || URI === '/admin') {
$_GET['u'] = $matches[1];
$_GET['c'] = $matches[2];
$_GET['id'] = $matches[3];
-//站点地图
-}elseif(URI === '/sitemap.xml'){
- $_GET['c'] = 'sitemap';
//匹配失败
}else{
header("HTTP/1.0 404 Not Found");
diff --git a/system/UseFew/local_backup.php b/system/UseFew/local_backup.php
index faef69d..ce87ff2 100644
--- a/system/UseFew/local_backup.php
+++ b/system/UseFew/local_backup.php
@@ -7,352 +7,5 @@ if(!defined('DIR')){
if(!is_subscribe('bool')){
msg(-1,"未检测到有效授权,无法使用该功能!");
}
-
- if($_GET['type'] == 'list'){
- $backup_dir = DIR."/data/backup/".U."/"; //备份目录
- $file_list = glob("{$backup_dir}*.info"); //扫描文件
- $num = count($file_list); //取列表数
- rsort($file_list,2); //按时间从大到小重排序
- //备份文件数大于20个时删除旧数据
- if( $num > 20 ) {
- for ($i=$num; $i > 20; $i--) {
- $path = pathinfo($file_list[$i-1]);
- $path = $path['dirname'] .'/'. $path['filename'];
- unlink($path.'.info');
- unlink($path.'.db3');
- unlink($path.'.tar');
- array_pop($file_list);
- }
- $count = 20;
- }else{
- $count = $num;
- }
-
- $data = [];
- //遍历读入备份信息
- foreach ($file_list as $key => $filePath) {
- $file = pathinfo($filePath);
- $info_file = @file_get_contents("{$file['dirname']}/{$file['filename']}.info");
- $info = json_decode($info_file,true);
- if($info != false){
- array_push($data,$info);
- }
- }
- msgA( ['code' => 1,'msg' => '','count' => $count,'data' => $data] );
- }elseif($_GET['type'] == 'backup'){
- //初始信息
- $info['user_dir'] = DIR."/data/user/".U;
- $info['backup_dir'] = DIR."/data/backup/".U; //备份目录
- $info['file'] = SysVer . "_".date("ymdHis",time())."_".Get_Rand_Str(5);
- $info['file_db'] = $info['backup_dir'] .'/'. $info['file'].'.db3';
- $info['file_info'] = $info['backup_dir'] .'/'. $info['file'].'.info';
- $info['file_gz'] = $info['backup_dir'] .'/'. $info['file'].'.tar';
- $info['table_arr'] = ['user_config','user_categorys','user_links','user_pwd_group','user_apply','user_share','user_article_list'];
- $info['lock'] = DIR.'/data/user/'.U.'/lock.'.UID;
- if (!extension_loaded('phar')) {
- msg(-1,'不支持phar扩展');
- }elseif(!is_dir($info['backup_dir']) && !mkdir($info['backup_dir'],0755,true) ){
- msg(-1,'创建backup目录失败');
- }elseif(!is_file($info['lock']) && !file_put_contents($info['lock'],'TwoNav')){
- msg(-1,'创建lock文件失败');
- }
-
- //打包用户文件
- try {
- $phar = new PharData($info['file_gz']);
- $phar->buildFromDirectory($info['user_dir']);
- } catch (Exception $e) {
- msg(-1,'打包用户数据发生异常>'.$e->getMessage());
- }
- //创建数据
- try {
- $MyDB = new Medoo\Medoo(['type'=>'sqlite','database'=>$info['file_db']]);
- $MyDB->query('CREATE TABLE IF NOT EXISTS "backup" ("id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"name" TEXT,"data" TEXT,CONSTRAINT "id" UNIQUE ("id" ASC));')->fetchAll();
- $MyDB->insert('backup',['name'=>'ver','data'=>SysVer]); //记系统版本
- $MyDB->insert('backup',['name'=>'backup_time','data'=>time()]); //记备份时间
- $MyDB->insert('backup',['name'=>'database_type','data'=>$GLOBALS['db_config']['type']]); //数据库类型
- }catch (Exception $e) {
- Amsg(-1,'创建备份数据库失败');
- }
-
- //开始备份数据
- $table_info = [];
- foreach($info['table_arr'] as $table_name){
- $count = count_db($table_name,['uid'=>UID]); //总条数
- $limit = 100; //每页数量
- $pages= ceil($count/$limit); //总页数
- //分页逐条处理
- for ($page=1; $page<=$pages; $page++) {
- $where['uid'] = UID;
- $where['LIMIT'] = [($page - 1) * $limit,$limit];
- $datas = select_db($table_name,'*',$where);
- foreach($datas as $data){
- try {
- if(isset($data['id'])){
- unset($data['id']);
- }
- $MyDB->insert('backup',['name'=>$table_name,'data'=>$data]);
- }catch (Exception $e) {
- Amsg(-1,'插入数据时发生异常');
- }
- }
- }
- $table_info[$table_name] = ['count'=>$count,'pages'=>$pages];
- }
-
- //备份信息
- $info['info'] = [
- "name" => $info['file'],
- "db_size" => filesize($info['file_db']),
- "db_md5" => md5_file($info['file_db']),
- "tar_size" => filesize($info['file_gz']),
- "tar_md5" => md5_file($info['file_gz']),
- "backup_time" => time(),
- "version" => SysVer,
- "desc" => "{$_POST['desc']}"
- ];
- $info['info'] = array_merge($table_info,$info['info']);
- $info['info'] = json_encode($info['info']);
- //写到文件
- if(file_put_contents($info['file_info'], $info['info']) === false){
- msg(-1,'写备份信息失败');
- }
- msg(1,'备份成功');
- //删除备份
- }elseif($_GET['type'] == 'del'){
- $path = DIR."/data/backup/".U."/".$_POST['name'];
- if( !preg_match_all('/^v\d+\.\d+\.\d+-\d{8}_\d{12}_[A-Za-z0-9]{5}$/',$_POST['name']) ) {
- msg(-1,'数据库名称不合法');
- }elseif(!is_file($path.'.info')){
- msg(-1,'备份不存在');
- }elseif(!extension_loaded('phar')) {
- msg(-1,'不支持phar扩展');
- }
- try {
- unlink($path.'.info');
- unlink($path.'.db3');
- unlink($path.'.tar');
- msg(1,'备份数据库已被删除');
- } catch (\Throwable $th) {
- msg(-1,"删除失败,请检查目录权限");
- }
- //回滚备份
- }elseif($_GET['type'] == 'restore'){
- try {
- global $db;
- header('Content-Type:application/json; charset=utf-8');
- //使用事务来处理
- $db->action(function($db) {
- //检测是否符合回滚要求
- $path = DIR."/data/backup/".U."/".$_POST['name'];
- if( !preg_match_all('/^v\d+\.\d+\.\d+-\d{8}_\d{12}_[A-Za-z0-9]{5}$/',$_POST['name']) ) {
- msg(-1,'数据库名称不合法');
- }
- $info_file = @file_get_contents($path.'.info');
- $info = json_decode($info_file,true);
- if($info == false){
- msg(-1,'读取备份信息失败');
- }elseif($info['db_md5'] != md5_file($path.'.db3')){
- msg(-1,'db3文件效验失败');
- }elseif($info['tar_md5'] != md5_file($path.'.tar')){
- msg(-1,'tar文件效验失败');
- }
-
- //载入数据库
- try {
- $MyDB = new Medoo\Medoo(['type'=>'sqlite','database'=>$path.'.db3']);
- }catch (Exception $e) {
- msg(-1,'载入备份数据库失败');
- return false;
- }
-
- //遍历删除用户数据
- $info['table_arr'] = ['user_config','user_categorys','user_links','user_pwd_group','user_apply','user_share','user_article_list'];
- foreach($info['table_arr'] as $table_name){
-
- //删除数据
- delete_db($table_name,['uid'=>UID]);
-
- //确保数据已删除
- if($db->has($table_name,['uid'=>UID])){
- msg(-1,'del ' . $table_name . ' fail');
- }
-
- //读取条数,分页逐条导入
- $count = $MyDB->count('backup',['name'=>$table_name]); //总条数
- $limit = 100; //每页数量
- $pages= ceil($count/$limit); //总页数
- for ($page=1; $page<=$pages; $page++) {
- $where['name'] = $table_name;
- $where['LIMIT'] = [($page - 1) * $limit,$limit];
- $datas = $MyDB->select('backup','data',$where);
- foreach($datas as $key => $data){
- $data = unserialize($data);
- //处理null
- foreach ($data as $key => $value) {
- if ($value === null) {
- $data[$key] = '';
- }
- }
-
- if(isset($data['id'])){
- unset($data['id']);
- }
- $data['uid'] = UID;
- insert_db($table_name,$data);
- }
- }
-
- //确保数据已导入
- if($count != count_db($table_name,['uid'=>UID])){
- msg(-1,'restore ' . $table_name . ' fail');
- }
- }
-
- //删除用户目录
- $user_dir = DIR."/data/user/".U;
- if(is_dir($user_dir) && !deldir($user_dir)){
- msg(-1,'删除用户目录失败');
- }
- //创建用户目录
- if(!is_dir($user_dir) && !mkdir($user_dir,0755,true)){
- msg(-1,'创建用户目录失败');
- }
- //回滚用户目录
- try {
- $phar = new PharData($path.'.tar');
- $phar->extractTo($user_dir, null, true);
- } catch (Exception $e) {
- msg(-1,'回滚用户数据失败');
- }
- //返回信息,直接msg会导致回滚
- header('Content-Type:application/json; charset=utf-8');
- echo(json_encode(['code'=>1,'msg'=>'回滚成功']));
- });
- } catch (\Throwable $th) {
- msg(-1,"回滚失败");
- }
- //导出密码验证
- }elseif($_GET['type'] == 'create'){
- global $USER_DB;
- $pwd = Get_MD5_Password($_POST['pwd'],$USER_DB["RegTime"]) === $USER_DB["Password"];
- if(!$pwd){
- msg(-1,'密码错误');
- }elseif(empty($_POST['name'])){
- msg(-1,'文件名不能为空');
- }elseif(!extension_loaded('phar')) {
- msg(-1,'不支持phar扩展');
- }
-
- $path = DIR."/data/backup/".U."/".$_POST['name'];
- if(!is_file($path.'.info')){
- msg(-1,'info文件不存在');
- }elseif(!is_file($path.'.db3')){
- msg(-1,'db3文件不存在');
- }elseif(!is_file($path.'.tar')){
- msg(-1,'tar文件不存在');
- }
-
- session_start();
- $key = md5(uniqid().Get_Rand_Str(8));
- try {
- $temp_dir = DIR."/data/temp/{$key}";
- if(!is_dir($temp_dir) && !mkdir($temp_dir,0755,true)){
- msg(-1,'创建临时目录失败');
- }
- copy($path.'.info',"{$temp_dir}/{$_POST['name']}.info");
- copy($path.'.db3',"{$temp_dir}/{$_POST['name']}.db3");
- copy($path.'.tar',"{$temp_dir}/{$_POST['name']}.tar");
- $backup_path = "{$temp_dir}/TwoNav_{$_POST['name']}.tar";
- $phar = new PharData($backup_path);
- $phar->buildFromDirectory($temp_dir);
- $phar->compress(Phar::GZ);
- $backup_path .= ".gz";
- if(!is_file($backup_path)){
- msg(-1,'打包数据失败');
- }
- } catch (Exception $e) {
- msg(-1,'压缩数据异常');
- }
- $_SESSION['download'][$key] = $backup_path;
- msgA(['code'=>1,'msg'=>'success','key'=>$key]);
- //下载备份数据
- }elseif($_GET['type'] == 'download'){
- session_start();
- if(empty($_GET['key']) || !isset($_SESSION['download'][$_GET['key']])){
- msg(-1,'Key不存在,请重新导出');
- }
- $path = $_SESSION['download'][$_GET['key']];
- if(!is_file($path)){
- msg(-1,'文件不存在,请重新导出');
- }
-
- $filename = pathinfo($path,PATHINFO_BASENAME);
- header("Cache-Control: public");
- header("Content-Description: File Transfer");
- header('Content-disposition: attachment; filename='.$filename); //文件名
- header("Content-Type: application/octet-stream");
- header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
- header('Content-Length: '. filesize($path)); //告诉浏览器,文件大小
- readfile($path); //返回文件
- unlink ($path);//删除临时文件
- unset($_SESSION['download'][$_GET['key']]); //删除Key
- deldir(DIR."/data/temp/{$_GET['key']}"); //删除临时目录
- //导入
- }elseif($_GET['type'] == 'local_import'){
- if (!extension_loaded('phar')) {
- msg(-1,'不支持phar扩展');
- }
- $key = md5(uniqid().Get_Rand_Str(8));
- $temp_dir = DIR."/data/temp/{$key}";
- if(!is_dir($temp_dir) && !mkdir($temp_dir,0755,true)){
- msg(-1,'创建临时目录失败');
- }
- //解压数据
- try {
- copy($_FILES['file']['tmp_name'],"{$temp_dir}/{$_FILES['file']['name']}");
- $phar = new PharData("{$temp_dir}/{$_FILES['file']['name']}");
- $phar->extractTo($temp_dir, null, true);
- unlink("{$temp_dir}/{$_FILES['file']['name']}");
- } catch (Exception $e) {
- deldir($temp_dir);
- msg(-1,'解压数据失败');
- }
- //获取备份信息
- $file = glob("{$temp_dir}/*.info");
- if(count($file) != 1){
- deldir($temp_dir);
- msg(-1,'读取备份信息失败');
- }
- $file = pathinfo($file[0]);
- $info = @file_get_contents("{$temp_dir}/{$file['basename']}");
- $info = json_decode($info,true);
- if($info == false){
- deldir($temp_dir);
- msg(-1,'解析备份信息失败');
- }elseif($info['db_md5'] != md5_file("{$temp_dir}/{$info['name']}.db3")){
- deldir($temp_dir);
- msg(-1,'db3文件效验失败'.$info['db_md5']);
- }elseif($info['tar_md5'] != md5_file("{$temp_dir}/{$info['name']}.tar")){
- deldir($temp_dir);
- msg(-1,'tar文件效验失败');
- }
- //检查目录
- if(!Check_Path(DIR."/data/backup/".U)){
- msg(-1,'创建backup目录失败,请检查权限');
- }
- //复制到用户数据
- try {
- $backup_dir = DIR."/data/backup/".U."/";
- copy("{$temp_dir}/{$info['name']}.info","{$backup_dir}{$info['name']}.info");
- copy("{$temp_dir}/{$info['name']}.db3", "{$backup_dir}{$info['name']}.db3");
- copy("{$temp_dir}/{$info['name']}.tar", "{$backup_dir}{$info['name']}.tar");
- deldir($temp_dir);
- msg(1,'导入成功');
- } catch (Exception $e) {
- deldir($temp_dir);
- msg(-1,'复制数据失败,请检查目录权限');
- }
- //结束
- }
+ msg(1,'请更新系统后再试');
}
diff --git a/system/admin.php b/system/admin.php
index 9ea863b..809765d 100644
--- a/system/admin.php
+++ b/system/admin.php
@@ -88,102 +88,6 @@ if($page == 'config_home'){
exit;
}
-//主题设置页面
-if( $page == 'theme_home' || $page == 'theme_login' || $page == 'theme_transit' || $page == 'theme_register' || $page == 'theme_guide' || $page == 'theme_article') {
- if(!check_purview('theme_in',1)){
- require(DIR.'/templates/admin/page/404.php');
- exit;
- }
- $fn = str_replace('theme_','',$page);
- $dirs = get_dir_list(DIR.'/templates/'.$fn);
-
- foreach ($dirs as $dir) {
- $path = DIR.'/templates/'.$fn.'/'.$dir; //目录完整路径
- //没有信息文件则跳过
- if(!is_file($path.'/info.json') ) {continue;}
- //读取主题信息
- $themes[$dir]['info'] = json_decode(@file_get_contents($path.'/info.json'),true);
- //是否支持配置
- $themes[$dir]['info']['config'] = is_file($path.'/config.php') ? '1':'0';
- //预览图优先顺序:png>jpg>info>default
- if(is_file($path.'/screenshot.jpg')){
- $themes[$dir]['info']['screenshot'] = "./templates/$fn/$dir/screenshot.jpg";
- }elseif(is_file($path.'/screenshot.png')){
- $themes[$dir]['info']['screenshot'] = "./templates/$fn/$dir/screenshot.png";
- }elseif(empty($themes[$dir]['info']['screenshot'])){
- $themes[$dir]['info']['screenshot'] = "./templates/admin/static/42ed3ef2c4a50f6d.png";
- }
- }
-
- //获取当前主题
- require "./system/templates.php";
-
- //在线主题处理
- if ( !$global_config['offline'] && $USER_DB['UserGroup'] === 'root'){
-
- if(preg_match('/^v.+-(\d{8})$/i',SysVer,$matches)){
- $sysver = intval( $matches[1] );//取版本中的日期
- }else{
- exit("获取程序版本异常");
- }
-
- //读取缓存
- $template = get_db('global_config','v',['k'=>$page.'_cache']);
- if(!empty($template)){
- $data = json_decode($template, true);
- }
-
- //没有缓存 或 禁止缓存 或 缓存过时
- if(empty($template) || $_GET['cache'] === 'no' || time() - $data["time"] > 1800 ){
- $urls = [
- "lm21" => "https://update.lm21.top/TwoNav/{$fn}_template.json",
- "gitee" => "https://gitee.com/tznb/twonav_updata/raw/master/{$fn}_template.json"
- ];
- $Source = $global_config['Update_Source'] ?? '';
- if (!empty($Source) && isset($urls[$Source])) {
- $urls = [$Source => $urls[$Source]];
- }
- }else{
- $cache = true;
- }
- //读取超时参数
- $overtime = !isset($global_config['Update_Overtime']) ? 3 : ($global_config['Update_Overtime'] < 3 || $global_config['Update_Overtime'] > 60 ? 3 : $global_config['Update_Overtime']);
- //远程获取
- foreach($urls as $key => $url){
- $Res = ccurl($url,$overtime);
- $data = json_decode($Res["content"], true);
- if($data["code"] == 200 ){ //如果获取成功
- $data["time"] = time(); //记录当前时间
- write_global_config($page.'_cache',json_encode($data),$fn.'_模板缓存');
- break; //跳出循环.
- }
- }
- //解析
- foreach($data["data"] as $key){
- $path = DIR.'/templates/'.$fn.'/'.$key["dir"];
- if( is_dir($path) ) { //本地存在
- $value = $key["dir"];
- //检查是否可以更新
- $update = str_replace('/','',$themes[$value]['info']['update']); //本地主题版本
- $update_new = str_replace('/','',$key["update"]); //远程主题版本
- if( $sysver >= intval($key["low"]) && $sysver <= intval($key["high"]) && $update < $update_new ){
- $themes[$value]['info']['up'] = '1';
- }
- }else{
- //判断是否适配当前系统版本
- if( $sysver >= intval($key["low"]) && $sysver <= intval($key["high"]) ){
- $value = $key["dir"];
- $themes[$value]['info'] = json_decode(json_encode($key),true);
- }
- }
- }
- //来源策略 (用于Gitee作为图床反防盗链)
- if(!empty($data['referrer'])){
- define('referrer',$data['referrer']);
- }
- }
-}
-
//不带参数是载入框架
if(empty($page)){
$site = unserialize(get_db('user_config','v',['uid'=>UID,'k'=>'s_site']));
diff --git a/system/api.php b/system/api.php
index d160fab..7eb0c86 100644
--- a/system/api.php
+++ b/system/api.php
@@ -750,23 +750,7 @@ function write_link(){
if(!is_subscribe('bool')){
msg(-1,"未检测到有效授权,无法使用该功能!");
}
- if(intval($_POST['icon']) > 0){
- if(!check_purview('icon_pull',1)){
- msg(-1,'您所在的用户组,无法使用网站图标获取功能');
- }
- $path = DIR ."/data/user/".U."/favicon";
- if(!Check_Path($path)){
- msg(-1,'创建目录失败,请检查目录权限');
- }
- $config = unserialize( get_db("global_config", "v", ["k" => "icon_config"])) ?? [];
- if($config['o_switch'] == '0'){
- msg(-1,'相关服务处于关闭状态,请联系站长开启');
- }
- }
- session_start();
- $key = md5(uniqid().Get_Rand_Str(8));
- $_SESSION['msg_pull']["$key"] = true;
- msgA(['code'=>1,'msg'=>'success','key'=>$key]);
+ msg(1,'请更新系统后再试');
}elseif($_GET['type'] === 'msg_pull'){
session_start();
$key = $_POST['key'];
@@ -860,39 +844,7 @@ function write_link(){
if(!is_subscribe('bool')){
msg(-1,"未检测到有效授权,无法使用该功能!");
}
- if(!check_purview('icon_pull',1)){
- msg(-1,'无权限');
- }
- $link = get_db('user_links','*',['uid'=>UID,'lid'=>$_POST['id']]);
- if(empty($link)){
- msg(-1,'请求的链接id不存在');
- }
- $path = DIR ."/data/user/".U."/favicon";
- if(!Check_Path($path)){
- msg(-1,'创建目录失败,请检查权限');
- }
- //检查配置
- $config = unserialize( get_db("global_config", "v", ["k" => "icon_config"])) ?? [];
- if($config['o_switch'] == '0'){
- msg(-1,'相关服务处于关闭状态,请联系站长开启');
- }
-
- //跳过存在图标的链接
- if(empty($_POST['cover']) && !empty($link['icon'])){
- msg(1,'skip');
- }
-
- $api = Get_Index_URL().'?c=icon&url='.base64_encode($link['url']);
- $res = ccurl($api,30,true);
- $data = get_db('global_icon','*',['url_md5'=>md5($link['url'])]);
- if(empty($data)){
- msg(1,'fail');
- }
- $new_path = "./data/user/".U.'/favicon/'.$data['file_name'];
- if(copy("./data/icon/{$data['file_name']}",$new_path)){
- update_db('user_links',['icon'=>$new_path],['uid'=>UID ,"lid" => $_POST['id'] ],[1,'success']);
- }
- msg(1,'fail');
+ msg(1,'请更新系统后再试');
}elseif($_GET['type'] == 'extend_list'){
if($GLOBALS['global_config']['link_extend'] != 1 ||!check_purview('link_extend',1)){
@@ -991,109 +943,11 @@ function write_security_setting(){
//写收录配置
function write_apply(){
- global $global_config;
- if($global_config['apply'] != 1){
- msg(-1,'管理员禁止了此功能!');
- }
- if($_GET['type'] == 'set'){
- $s['apply'] = intval($_POST['apply']); // 功能选项0.关闭 1.需要审核 2.无需审核
- $s['Notice'] = $_POST['Notice']??''; // 公告
- $s['submit_limit'] = intval($_POST['submit_limit']); //提交限制
- $s['iconurl'] = $_POST['iconurl'];
- $s['description'] = $_POST['description'];
- $s['email'] = $_POST['email'];
-
- if($s['apply'] < 0 || $s['apply'] > 2 ){
- msg(-1,'参数错误!');
- }elseif(strlen($s['Notice']) > 512){
- msg(-1,'公告长度超限!');
- }if(empty($_POST['submit_limit']) || !preg_match("/^\d*$/",$_POST['submit_limit'])){
- msg(-1,'提交限制必须为正整数!');
- }
-
- write_user_config('apply',$s,'config','收录配置');
- msg(1,'保存成功');
- }elseif($_GET['type'] == '2'){ //通过
- $id = intval($_POST['id']);
- $link = get_db("user_apply","*",["uid"=>UID,"id"=> $id ]);
- if(empty($id)){
- msg(-1,'id错误');
- }elseif(empty($link['category_id'])){
- msg(-1,'分类id错误');
- }elseif(empty($link['title'])){
- msg(-1,'标题不能为空');
- }elseif(empty($link['url'])){
- msg(-1,'链接不能为空');
- }elseif($link['state'] != 0){
- msg(-1,'此申请信息不是待审核状态!');
- }elseif(!empty(get_db('user_links','*',['uid'=>UID,'url'=>$link['url']]))){
- msg(-1,'链接已存在');
- }
- check_link($link['category_id'],$link['title'],$link['url'],''); //检测链接是否合法
- $lid = get_maxid('link_id');
- $data = [
- 'lid' => $lid,
- 'uid' => UID,
- 'fid' => $link['category_id'],
- 'title' => $link['title'],
- 'url' => $link['url'],
- 'description' => $link['description'],
- 'add_time' => time(),
- 'up_time' => time(),
- 'icon' => $link['iconurl']
- ];
- insert_db('user_links',$data);//插入链接
- update_db('user_apply',['state'=>1],['uid'=>UID,'id'=>$id]);//更新状态
- msg(1,'操作成功');
- }elseif($_GET['type'] == '3'){ //拒绝
- update_db('user_apply',['state'=>2],['uid'=>UID,'id'=>intval($_POST['id'])],[1,'操作成功']);//更新状态
- }elseif($_GET['type'] == '4'){ //删除
- delete_db('user_apply',['uid'=>UID,'id'=>intval($_POST['id'])],[1,'操作成功']);
- }elseif($_GET['type'] == 'empty'){ //清空
- delete_db('user_apply',['uid'=>UID],[1,'操作成功']); //删除
- }elseif($_GET['type'] == 'edit'){ //编辑
- $id = intval($_POST['id']);
- $link = get_db("user_apply","*",["uid"=>UID,"id"=> $id]);
- if(empty($id)){
- msg(-1,'id错误');
- }elseif(empty($link)){
- msg(-1,'未找到数据');
- }
- $category_id = intval($_POST['edit_category']);
- $category_name = get_db("user_categorys","name",["uid"=>UID,"cid"=> $category_id ]);
- if(empty($category_name)){
- msg(-1,'未找到分类');
- }
-
- $data = [
- 'category_id' => $category_id,
- 'category_name' => $category_name,
- 'title' => htmlspecialchars($_POST['title'],ENT_QUOTES),
- 'url' => $_POST['url'],
- 'description' => htmlspecialchars($_POST['description'],ENT_QUOTES),
- 'iconurl' => $_POST['iconurl']
- ];
- update_db('user_apply',$data,['uid'=>UID,'id'=>intval($_POST['id'])]);
- msg(1,'修改成功');
- }
- msg(-1,'不支持的操作类型');
+ msg(-1,'免费版不支持此功能,请购买授权版');
}
//读收录列表
function read_apply_list(){
- $page = empty(intval($_REQUEST['page'])) ? 1 : intval($_REQUEST['page']);
- $limit = empty(intval($_REQUEST['limit'])) ? 50 : intval($_REQUEST['limit']);
- $offset = ($page - 1) * $limit; //起始行号
- $where["uid"] = UID;
-
- //统计条数
- $count = count_db('user_apply',$where);
- //权重排序(数字小的排前面)
- $where['ORDER']['id'] = 'DESC';
- //分页
- $where['LIMIT'] = [$offset,$limit];
- //查询
- $datas = select_db('user_apply','*',$where);
- msgA(['code'=>1,'msg'=>'获取成功','count'=>$count,'data'=>$datas]);
+ msgA(['code'=>-1,'msg'=>'免费版不支持此功能,请购买授权版','count'=>0,'data'=>[]]);
}
//写站点设置
@@ -1436,10 +1290,7 @@ function read_theme(){
//没有缓存 或 禁止缓存 或 缓存过时
if(empty($template) || $_GET['cache'] === 'no' || time() - $data["time"] > 1800 ){
- $urls = [
- "lm21" => "https://update.lm21.top/TwoNav/{$request_dir}_template.json",
- "gitee" => "https://gitee.com/tznb/twonav_updata/raw/master/{$request_dir}_template.json"
- ];
+ $urls = ["gitee" => "http://tznb.gitee.io/twonav_resource/{$request_dir}_template.json"];
$Source = $global_config['Update_Source'] ?? '';
if (!empty($Source) && isset($urls[$Source])) {
$urls = [$Source => $urls[$Source]];
@@ -1450,7 +1301,7 @@ function read_theme(){
//读取超时参数
$overtime = !isset($global_config['Update_Overtime']) ? 3 : ($global_config['Update_Overtime'] < 3 || $global_config['Update_Overtime'] > 60 ? 3 : $global_config['Update_Overtime']);
//远程获取
- foreach($urls as $key => $url){
+ foreach($urls as $key => $url){
$Res = ccurl($url,$overtime);
$data = json_decode($Res["content"], true);
if($data["code"] == 200 ){ //如果获取成功
@@ -1500,71 +1351,7 @@ function write_theme(){
is_root();
if($global_config['offline']){msg(-1,"离线模式禁止下载主题!");} //离线模式
if(!is_subscribe('bool')){msg(-1,"未检测到有效授权,无法使用该功能!");}
- $dir = $_POST['dir'];
- $name = $_POST['name'];
- if(preg_match('/^v.+-(\d{8})$/i',SysVer,$matches)){
- $sysver = intval( $matches[1] );
- }else{
- msg(-1,"获取程序版本异常");
- }
- if(!is_writable('./templates')){
- msg(-1,"检测到模板目录不可写
请检查templates目录权限
宝塔面板请注意所有者为www
其他疑问请联系技术支持");
- }
- //从数据库查找主题信息
- $template = get_db('global_config','v',['k'=> 'theme_'.$fn.'_cache']);
- if(empty($template)){
- msg(-1,'-1,未找到数据');
- }else{
- $data = json_decode($template, true); //转为数组
- foreach($data["data"] as $key){
- if( $key['dir'] === $dir && $sysver >= intval($key["low"]) && $sysver <= intval($key["high"])){
- $file = $key['dir'].".tar.gz";
- $filePath = DIR."/data/temp/{$file}";
- break; //找到跳出
- }
- }
- if(empty($file)){
- msg(-1,'-2,未找到数据');
- }
- }
-
- //下载主题包
- if(!is_dir('./data/temp')) mkdir('./data/temp',0755,true) or msg(-1,'下载失败,创建临时[/data/temp]目录失败');
- if(!is_writable('./data/temp')){
- msg(-1,"检测到临时目录不可写
请检查data/temp目录权限
宝塔面板请注意所有者为www
其他疑问请联系技术支持");
- }
- $data = $key;
- foreach($data['url'] as $url){
- if(downFile( $url , $file , DIR.'/data/temp/')){
- $file_md5 = md5_file($filePath);
- if($file_md5 === $data['md5']){
- $downok = true;
- break;//下载成功,跳出循环!
- }else{
- unlink($filePath);
- }
- }
- }
- //判断下载结果
- if(!$downok || !file_exists($filePath)){
- msg(-1,'-1,下载失败');
- }elseif($file_md5 != $data['md5']){
- msgA(['code'=>-1,'msg'=> '效验压缩包异常','Correct_md5'=> $data['md5'],'file_md5'=>$file_md5]);
- }
- //解压主题包
- try {
- $phar = new PharData($filePath);
- $phar->extractTo(DIR.'/templates/'.$fn, null, true); //路径 要解压的文件 是否覆盖
- unlink($filePath);//删除文件
- } catch (Exception $e) {
- msg(-1,'解压主题包失败');
- }
- //检查结果并返回
- if(file_exists(DIR."/templates/$fn/".$data['dir']."/info.json")){
- msgA(['code'=>1,'msg'=> '下载成功']);
- }else{
- msgA(['code'=>-1,'msg'=> '解压后未找到主题信息','url'=> $url,'file_md5'=>$file_md5]);
- }
+ msg(1,'请更新系统后再试');
//删除主题
}elseif($_GET['type'] == 'del'){
@@ -1995,19 +1782,11 @@ function read_data(){
//扩展功能
$extend = [];
- if($global_config['apply'] == 1 && check_purview('apply',1)){
- array_push($extend,['title'=>'收录管理','href'=>'expand/apply-admin','icon'=>'fa fa-pencil']);
- }
- if($global_config['guestbook'] == 1 && check_purview('guestbook',1)){
- array_push($extend,['title'=>'留言管理','href'=>'expand/guestbook-admin','icon'=>'fa fa-commenting-o']);
- }
- if($global_config['article'] > 0 && check_purview('article',1)){
- array_push($extend,['title'=>'文章管理','href'=>'expand/article-list','icon'=>'fa fa-file-text-o']);
- }
- if(!empty($extend)){
- $extend = ['title'=>'扩展功能','icon'=>'fa fa-folder-open-o','href'=>'','child'=> $extend];
- array_push($menu,$extend);
- }
+ array_push($extend,['title'=>'收录管理','href'=>'expand/apply-admin','icon'=>'fa fa-pencil']);
+ array_push($extend,['title'=>'留言管理','href'=>'expand/guestbook-admin','icon'=>'fa fa-commenting-o']);
+ array_push($extend,['title'=>'文章管理','href'=>'expand/article-list','icon'=>'fa fa-file-text-o']);
+ $extend = ['title'=>'扩展功能','icon'=>'fa fa-folder-open-o','href'=>'','child'=> $extend];
+ array_push($menu,$extend);
//如果是管理员则追加菜单
if($USER_DB['UserGroup'] == 'root'){
@@ -2045,60 +1824,7 @@ function write_article(){
}
//百度推送
function other_baidu_push(){
- global $u,$global_config;
- if ( $global_config['offline'] == '1'){
- msg(-1,"离线模式无法使用此功能");
- }
- if(!is_subscribe('bool')){
- msg(-1,"未检测到有效授权,无法使用该功能!");
- }
- if(empty($_POST['push_api'])){
- msg(-1,'请输入接口地址');
- }
- if(empty($_POST['id'])){
- msg(-1,'请提交链接ID');
- }
- $host = $_SERVER['HTTP_HOST']; // 获取主机名
- $port = isset($_SERVER['SERVER_PORT']) ? ($_SERVER['SERVER_PORT'] == 80 ? '' : ':'.$_SERVER['SERVER_PORT']) : ''; // 获取端口号
- $scheme = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https://' : 'http://'; // 获取协议
- $host = $scheme.$host.$port;
- $ids = json_decode($_POST['id']) ?? 0;
- if(count($ids)<1){
- msg(-1,'解析数据失败,请检查格式是否正确');
- }
- $urls=[];
- if($_POST['type'] == 'link'){
- foreach($ids as $id){
- $urls[] = "{$host}/{$u}/click/{$id}.html";
- }
- }elseif($_POST['type'] == 'article'){
- foreach($ids as $id){
- $urls[] = "{$host}/{$u}/article/{$id}.html";
- }
- }else{
- msg(-1,'无效类型');
- }
-
- if(!empty($urls)){
- $api = $_POST['push_api'];
- write_user_config('baidu_push_api',$api,'config','百度推送API');
- $ch = curl_init();
- $options = array(
- CURLOPT_URL => $api,
- CURLOPT_POST => true,
- CURLOPT_RETURNTRANSFER => true,
- CURLOPT_POSTFIELDS => implode("\n", $urls),
- CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
- );
- curl_setopt_array($ch, $options);
- $result = curl_exec($ch);
- $result = json_decode($result,true) ?? '';
- if(empty($result)){
- msg(-1,'推送失败');
- }else{
- msgA(['code'=>curl_getinfo($ch, CURLINFO_HTTP_CODE),'data'=>$result]);
- }
- }
+ msg(-1,'未检测到有效授权,无法使用该功能');
}
//获取链接信息
function other_get_link_info(){
diff --git a/system/api_article.php b/system/api_article.php
index da291c0..c7433ea 100644
--- a/system/api_article.php
+++ b/system/api_article.php
@@ -1,222 +1,2 @@
> '.$type);
-}
-
-//上传图片
-function uploadImage(){
- global $u;
- //权限检测
- if(!check_purview('article_image',1)){
- msgA(['errno'=>-1,'message'=>'您的用户组无权限上传图片']);
- }elseif(empty($_FILES["file"]) || $_FILES["file"]["error"] > 0){
- msgA(['errno'=>-1,'message'=>'文件上传失败']);
- }
-
- //取后缀并判断是否支持
- $suffix = strtolower(end(explode('.',$_FILES["file"]["name"])));
- if(!preg_match('/^(jpg|png|gif|bmp|jpeg|svg|webp)$/',$suffix)){
- @unlink($_FILES["file"]["tmp_name"]);
- msgA(['errno'=>-1,'message'=>'文件格式不被支持']);
- }
- //限制文件大小
- if(filesize($_FILES["file"]["tmp_name"]) > 5 * 1024 * 1024){
- msgA(['errno'=>-1,'message'=>'文件大小超限']);
- }
- //文件临时路径
- $ym = date("Ym");
- $path = DIR . "/data/user/{$u}/upload/{$ym}/";
- //检测目录,不存在则创建!
- if(!Check_Path($path)){
- msgA(['errno'=>-1,'message'=>'创建upload目录失败,请检查权限']);
- }
- $tmp_name = 'AI_'.uniqid().'.'.$suffix;
- //移动文件
- if(!move_uploaded_file($_FILES["file"]["tmp_name"],"{$path}/{$tmp_name}")) {
- msgA(['errno'=>-1,'message'=>'上传失败,请检查目录权限']);
- }else{
- msgA(['errno'=>0,'data'=>['url'=>"./data/user/{$u}/upload/{$ym}/$tmp_name",'alt'=>$_FILES["file"]["name"],'href'=>''],'message'=>'上传成功']);
- }
-}
-//删除图片
-function deleteImage(){
- global $u;
- if(empty($_POST['path'])){
- msg(-1,'请求参数错误');
- }
- $path = $_POST['path'];
- $pattern = "/^\.\/data\/user\/{$u}\/upload\/\d{6}\/AI_[A-Za-z0-9_]+\.(jpg|png|gif|bmp|jpeg|svg|webp)$/i";
- if(preg_match($pattern,$path) && is_file($path)){
- @unlink($path);
- }else{
- msg(-1,'请求参数错误');
- }
- //需考虑编辑文章删除封面时未点击保存的情况
- if(is_file($path)){
- msg(-1,'删除失败');
- }else{
- msg(1,'删除成功');
- }
-}
-//上传视频
-function uploadVideo(){
- msgA(['errno'=>-1,'message'=>'未开放']);
- global $u;
- //权限检测
- if(!check_purview('article_image',1)){
- msgA(['errno'=>-1,'message'=>'您的用户组无权限上传视频']);
- }elseif(empty($_FILES["file"]) || $_FILES["file"]["error"] > 0){
- msgA(['errno'=>-1,'message'=>'文件上传失败']);
- }
-
- //取后缀并判断是否支持
- $suffix = strtolower(end(explode('.',$_FILES["file"]["name"])));
- if(!preg_match('/^(avi|mp4|wma|rmvb|rm|flash|3gp|flv)$/',$suffix)){
- @unlink($_FILES["file"]["tmp_name"]);
- msgA(['errno'=>-1,'message'=>'文件格式不被支持']);
- }
- //限制文件大小
- if(filesize($_FILES["file"]["tmp_name"]) > 20 * 1024 * 1024){
- msgA(['errno'=>-1,'message'=>'文件大小超限']);
- }
- //文件临时路径
- $ym = date("Ym");
- $path = DIR . "/data/user/{$u}/upload/{$ym}/";
- //检测目录,不存在则创建!
- if(!Check_Path($path)){
- msgA(['errno'=>-1,'message'=>'创建upload目录失败,请检查权限']);
- }
- $tmp_name = 'AV_'.uniqid().'.'.$suffix;
- //移动文件
- if(!move_uploaded_file($_FILES["file"]["tmp_name"],"{$path}/{$tmp_name}")) {
- msgA(['errno'=>-1,'message'=>'上传失败,请检查目录权限']);
- }else{
- msgA(['errno'=>0,'data'=>['url'=>"./data/user/{$u}/upload/{$ym}/$tmp_name",'alt'=>$_FILES["file"]["name"],'href'=>''],'message'=>'上传成功']);
- }
-}
-
-//获取文章列表
-function article_list(){
- $where['uid'] = UID;
- //分类筛选
- if(intval(@$_POST['category']) > 0){
- $where['AND']['category'] = intval(@$_POST['category']);
- }
- //状态筛选
- if(intval(@$_POST['state']) > 0){
- $where['AND']['state'] = intval(@$_POST['state']);
- }
- //关键字筛选
- $query = $_POST['keyword'];
- if(!empty($query)){
- $where['AND']['OR'] = ["title[~]" => $query,"summary[~]" => $query,"content[~]" => $query];
- }
- //统计条数
- $count = count_db('user_article_list',$where);
- //分页
- $page = empty(intval($_REQUEST['page'])) ? 1 : intval($_REQUEST['page']);
- $limit = empty(intval($_REQUEST['limit'])) ? 50 : intval($_REQUEST['limit']);
- $offset = ($page - 1) * $limit; //起始行号
- $where['LIMIT'] = [$offset,$limit];
-
- $datas = select_db('user_article_list',['id','title','category','state','password','top','add_time','up_time','browse_count','summary','cover'],$where);
-
- //查询分类
- $categorys = select_db('user_categorys',['cid(id)','name'],['uid'=>UID]);
- $categorys = array_column($categorys,'name','id');
- //为文章添加分类名称
- foreach ($datas as &$data) {
- $data['category_name'] = $categorys[$data['category']] ?? 'Null';
- }
- msgA(['code'=>1,'count'=>$count,'data'=>$datas]);
-}
-
-//保存文章
-function save_article(){
- if(empty($_POST['category']) || !has_db('user_categorys',['uid'=>UID,'cid'=>$_POST['category']])){
- msg(-1,'分类不存在');
- }
- $time = time();
- //id为空,添加文章
- if(empty($_POST['id'])){
- insert_db('user_article_list',[
- 'uid'=>UID,
- 'title'=>$_POST['title'],
- 'category'=>$_POST['category'],
- 'state'=>$_POST['state'],
- 'password'=>'',
- 'top'=>0,
- 'add_time'=>$time,
- 'up_time'=>$time,
- 'browse_count'=>0,
- 'summary'=>$_POST['summary'],
- 'content'=>$_POST['content'],
- 'cover'=>$_POST['cover_url'],
- 'extend'=>''
- ],[1,'保存成功']);
- //存在id,更新文章数据
- }else{
- if(!has_db('user_article_list',['uid'=>UID,'id'=>$_POST['id']])){
- msg(-1,'文章id错误');
- }
- update_db('user_article_list',[
- 'title'=>$_POST['title'],
- 'category'=>$_POST['category'],
- 'state'=>$_POST['state'],
- 'up_time'=>$time,
- 'summary'=>$_POST['summary'],
- 'content'=>$_POST['content'],
- 'cover'=>$_POST['cover_url']
- ],['uid'=>UID,'id'=>$_POST['id']],[1,'保存成功']);
- }
-
-
-}
-//删除文章
-function del_article(){
- $id = json_decode($_POST['id']);
- if(empty($id)) msg(-1,'参数错误');
- delete_db('user_article_list',['uid'=>UID,'id'=>$id],[1,'操作成功']);
-}
-//修改分类
-function up_category(){
- $id = json_decode($_POST['id']);
- if(empty($id)) msg(-1,'参数错误');
- if(empty($_POST['category_id']) || !has_db('user_categorys',['uid'=>UID,'cid'=>$_POST['category_id']])){
- msg(-1,'分类不存在');
- }
- update_db('user_article_list',['category'=>$_POST['category_id']],['uid'=>UID,'id'=>$id],[1,'操作成功']);
-}
-//修改状态
-function up_state(){
- $id = json_decode($_POST['id']);
- if(empty($id)) msg(-1,'参数错误');
- if(!in_array($_POST['state_id'],['1','2','3','4'])){
- msg(-1,'状态参数错误');
- }
- update_db('user_article_list',['state'=>$_POST['state_id']],['uid'=>UID,'id'=>$id],[1,'操作成功']);
-}
-
-
-//保存设置 (与站点配置共享)
-function save_article_set(){
- //检查配置参数
- if(!in_array($_POST['visual'],['0','1','2']) || !in_array($_POST['icon'],['0','1','2'])){
- msg(-1,'参数错误');
- }
- //读取站点配置
- $s_site = unserialize(get_db('user_config','v',['uid'=>UID,'k'=>'s_site']));
- $s_site['article_visual'] = $_POST['visual'];
- $s_site['article_icon'] = $_POST['icon'];
- update_db("user_config",["v"=>$s_site],["k"=>'s_site',"uid"=>UID],[1,'保存成功']);
-}
-
-
+msg(-1,'未检测到有效授权,无法使用该功能');
diff --git a/system/api_root.php b/system/api_root.php
index 651515e..92f8311 100644
--- a/system/api_root.php
+++ b/system/api_root.php
@@ -33,76 +33,52 @@ function other_upsys(){
msg(-1,"文件夹不可写 >> $path");
}
}
-
- $_SESSION['upsys']['sysver'] = intval($matches[1]);
- usleep(1000*300); //延迟300毫秒
- msg(1,'success');
- }
- //下载更新包
- if($_POST['i'] == 2){
+ //检查授权状态
if(!is_subscribe('bool')){
msg(-1,'未检测到有效授权,请
购买授权
或
手动更新');
}
+ $subscribe = unserialize(get_db('global_config','v',["k" => "s_subscribe"]));
+ if(!isset($subscribe['public']) || empty($subscribe['public'])){
+ msg(-1,'
+ 错误原因: 未检测到授权秘钥
如何处理:
+ 1. 转到授权管理页面点击保存设置
+ 2. 提示保存成功后在尝试更新');
+ }
+ $_SESSION['upsys']['sysver'] = intval($matches[1]);
+ usleep(1000*300); //延迟300毫秒
+ msg(1,'success');
+ }
+ //下载更新包
+ if($_POST['i'] == 2){
//设置执行最长时间,0为无限制。单位秒!
set_time_limit(5*60);
$overtime = !isset($GLOBALS['global_config']['Update_Overtime']) ? 3 : ($GLOBALS['global_config']['Update_Overtime'] < 3 || $GLOBALS['global_config']['Update_Overtime'] > 60 ? 3 : $GLOBALS['global_config']['Update_Overtime']);
- //加载远程数据
- $urls = [
- "lm21" => "https://update.lm21.top/TwoNav/updata.json",
- "gitee" => "https://gitee.com/tznb/twonav_updata/raw/master/updata.json"
- ];
- $Source = $GLOBALS['global_config']['Update_Source'] ?? '';
- if (!empty($Source) && isset($urls[$Source])) {
- $urls = [$Source => $urls[$Source]];
- }
-
- foreach($urls as $key => $url){
- $Res = ccurl($url,$overtime);
- $data = json_decode($Res["content"], true);
- if($data["code"] == 200 ){ //如果获取成功
- break; //跳出循环.
- }
- }
-
+ //请求获取更新包
+ $Res = ccurl("http://service.twonav.cn/service.php",30,true,data_encryption('updateSystem',['sysver'=>$_SESSION['upsys']['sysver']]));
+ $data = json_decode($Res["content"], true);
+
if($data["code"] != '200'){
- msg(-1,'获取更新信息失败,请稍后再试..');
+ msg(-1,$data['msg'] ?? '获取更新信息失败,请稍后再试..');
}
- foreach($data["data"] as $key){
- if( $_SESSION['upsys']['sysver'] >= $key["low"] && $_SESSION['upsys']['sysver'] <= $key["high"] && $key["update"] > $_SESSION['upsys']['sysver']){
- $file = "System_Upgrade.tar.gz";
- $filePath = "./data/temp/{$file}";
- $data = $key;
- break; //找到跳出
- }
- }
- if(empty($file)){
- msg(-1,'暂无可用更新');
- }
+ $file = "System_Upgrade.tar.gz";
+ $filePath = "./data/temp/{$file}";
//下载升级包
- unlink($filePath);
- foreach($data["url"] as $url){
- if(downFile($url,$file,'./data/temp/')){
- $file_md5 = md5_file($filePath);
- if($file_md5 === $data['md5']){
- break; //下载成功,跳出循环
- }else{
- unlink($filePath); //下载失败,删除文件
- }
+ if(downFile($data['url'],$file,'./data/temp/')){
+ $file_md5 = md5_file($filePath);
+ if($file_md5 != $data['md5']){
+ unlink($filePath);
+ msg(-1,'更新包校验失败,请重试或联系客服');
}
- }
- //检查下载结果
- if(empty($file_md5) ){
+ }else{
msg(-1,'下载更新包失败');
- }elseif($file_md5 != $data['md5']){
- msgA(['code'=>-1,'msg'=> '升级包效验失败','correct_md5'=> $data['md5'],'reality_md5'=>$file_md5]);
}
- //sleep(1);
+
msg(1,'success');
}
@@ -199,6 +175,7 @@ function other_upsys(){
msgA(['code'=>-1,'msg'=>'步骤错误']);
}
+
//读用户列表
function read_user_list(){
$query = $_POST['query'];
@@ -261,19 +238,7 @@ function read_users_list(){
if(!is_subscribe('bool')){
msg(-1,'未检测到有效授权');
}
- $purview_list = select_db('purview_list','name','');
- $datas = select_db('user_group',['id','name','allow','code','codes','uname'],'');
- foreach ($datas as $key => $data){
- $datas[$key]['codes'] = unserialize($datas[$key]['codes']);
- if(empty($datas[$key]['codes'])){
- $datas[$key]['disable'] = $purview_list;//为空表示全部
- }else{
- $datas[$key]['disable'] = array_diff($purview_list,explode(",", $data['allow']));
- }
-
- $datas[$key]['disable'] = implode(',',$datas[$key]['disable']); //数组转文本
- }
- msgA(['code'=>1,'msg'=>'获取成功','count'=>count($datas),'data'=>$datas]);
+ msg(1,'请更新系统后再试');
}
//写用户组
@@ -289,123 +254,13 @@ function write_users(){
if(!is_subscribe('bool')){
msg(-1,'未检测到有效授权');
}
- $USER = $_POST['uname'];
- $USER_ID = '';
- if(!empty($USER)){
- $USER_ID = get_db("global_user", "ID", ["User"=>$USER]);
- if(empty($USER_ID)){msg(-1,'蓝图用户不存在');}
- }
-
- if($_GET['type'] == 'add'){
- if(!empty(get_db('user_group','code',['code' => $_POST['code']]))){
- msg(-1,'分组代号已存在');
- }elseif(!empty(get_db('user_group','name',['name' => $_POST['name']]))){
- msg(-1,'分组名称已存在');
- }
-
- insert_db('user_group',["uname"=>$USER,"uid"=>$USER_ID,"code"=>$_POST['code'],"name"=>$_POST['name'],"allow"=>$_POST['allow_list'],"codes"=>json_decode($_POST['allow_code_list'])],[1,'添加成功']);
- }elseif($_GET['type'] == 'edit'){
- if(empty(get_db('user_group','code',['code' => $_POST['code']]))){
- msg(-1,'此分组代号不存在');
- }elseif(!empty(get_db('user_group','name',['name' => $_POST['name'],'code[!]'=>$_POST['code']]))){
- msg(-1,'分组名称已存在');
- }
- update_db('user_group',["uname"=>$USER,"uid"=>$USER_ID,"name"=>$_POST['name'],'allow'=>$_POST['allow_list'],'codes'=>json_decode($_POST['allow_code_list']) ],['code'=>$_POST['code']],[1,'保存成功']);
- }elseif($_GET['type'] == 'del'){
- global $global_config;
- if(!empty(get_db('global_user','ID',['UserGroup' => $_POST['code']]))){
- msg(-1,'无法删除,有用户正在使用此用户组');
- }elseif(!empty(get_db('regcode_list','regcode',['u_group' => $_POST['code']]))){
- msg(-1,'无法删除,存在使用此用户组的注册码');
- }elseif($global_config['default_UserGroup'] == $_POST['code']){
- msg(-1,'无法删除,正在被使用:系统设置>默认分组');
- }
- delete_db('user_group',["code" => $_POST['code'] ],[1,'删除成功']);
- }
+ msg(1,'请更新系统后再试');
}
//写用户信息
function write_user_info(){
- switch ($_GET['type']) {
- //删除
- case "Del":
- $uids = json_decode($_POST['ID']);
- $USER_S = select_db('global_user','User',['ID'=>$uids]);
- foreach($USER_S as $USER){
- if(is_dir(DIR.'/data/user/'.$USER)){
- deldir(DIR.'/data/user/'.$USER);
- if(is_dir(DIR.'/data/user/'.$USER)){
- msg(1,'删除用户数据目录失败,用户名:'.$USER);
- }
- }
- if(is_dir(DIR.'/data/backup/'.$USER)){
- deldir(DIR.'/data/backup/'.$USER);
- if(is_dir(DIR.'/data/backup/'.$USER)){
- msg(1,'删除用户备份目录失败,用户名:'.$USER);
- }
- }
- }
- foreach (['regcode_list','user_categorys','user_config','user_count','user_links','user_log','user_login_info'] as $table){
- delete_db($table,[ "uid" => $uids ]);
- }
- delete_db('global_user',["ID" => $uids]);
- msg(1,'删除成功');
- break;
- //删除OTP验证
- case "Del_OTP":
- $uids = json_decode($_POST['ID']);
- $USER_S = select_db('global_user',['LoginConfig','ID','User'],['ID'=>$uids]);
- $fail = 0;
- foreach($USER_S as $USER){
- $LoginConfig = unserialize($USER['LoginConfig']);
- if(empty($LoginConfig['totp_key'])){
- $fail ++;
- continue;
- }
- $LoginConfig['totp_key'] = '';
- update_db("global_user", ["LoginConfig" => $LoginConfig], ["ID" => $USER['ID']]);
- }
- if($fail > 0){
- msg(1,'操作完毕,有'.$fail.'个账号未开启OTP双重验证');
- }
- msg(1,'操作成功');
- break;
- //设用户组
- case "set_UserGroup":
- if(empty($_POST['UserGroup'])){
- msg(-1,'用户组不能为空');
- }elseif(!in_array($_POST['UserGroup'],['default','root']) && empty(get_db('user_group','code',['code' => $_POST['UserGroup']]))){
- msg(-1,'用户组不存在');
- }
- update_db('global_user',['UserGroup'=>$_POST['UserGroup']],["ID" => json_decode($_POST['ID']) ],[1,'修改成功']);
- break;
- //设密码
- case "set_pwd":
- if(!has_db('global_user',['ID'=>$_POST['ID']])){
- msg(-1,'用户不存在!');
- }
- //空字符串md5 防止意外出现空密码
- if( $_POST['new_pwd']== 'd41d8cd98f00b204e9800998ecf8427e'){
- msg(-1,'密码不能为空');
- }
- $RegTime = get_db('global_user','RegTime',['ID'=>$_POST['ID']]);
- update_db('global_user',['Password'=>Get_MD5_Password($_POST['new_pwd'],$RegTime)],["ID" => $_POST['ID'] ],[1,'修改成功']);
- break;
- //设邮箱
- case "set_email":
- if(!preg_match("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/i",$_POST['new_email'])){
- msg(-1,'邮箱错误!');
- }
- if(has_db('global_user',['Email'=>$_POST['new_email']])){
- msg(-1,'邮箱已存在!');
- }
- update_db('global_user',['Email'=>$_POST['new_email']],["ID" => $_POST['ID'] ],[1,'修改成功']);
- break;
-
- default:
- msg(-1,'操作类型错误');
- }
+ msg(-1,'未检测到有效授权,无法使用该功能');
}
//读注册码列表
@@ -413,29 +268,7 @@ function read_regcode_list(){
if(!is_subscribe('bool')){
msg(-1,'未检测到有效授权');
}
- $page = empty(intval($_REQUEST['page'])) ? 1 : intval($_REQUEST['page']);
- $limit = empty(intval($_REQUEST['limit'])) ? 50 : intval($_REQUEST['limit']);
- $offset = ($page - 1) * $limit; //起始行号
- $where = [];
-
- //统计条数
- $count = count_db('regcode_list',$where);
- //分页
- $where['LIMIT'] = [$offset,$limit];
- //排序
- $where['ORDER']['id'] = 'DESC';
- //查询
- $datas = select_db('regcode_list','*',$where);
- //用户组处理
- if(!empty($datas)){
- $user_group = select_db('user_group',['name','code'],'');//读用户组
- $user_group = array_column($user_group, 'name', 'code');//以代号为键
- $user_group['root'] = '站长';
- $user_group['default'] = '默认';
- foreach ($datas as $key => $data){
- $datas[$key]['UserGroupName'] = $user_group[$data['u_group']]??'Null';
- }
- }
+ msg(1,'请更新系统后再试');
msgA(['code'=>1,'msg'=>'获取成功','count'=>$count,'data'=>$datas]);
}
@@ -445,43 +278,14 @@ function write_regcode(){
if(!is_subscribe('bool')){
msg(-1,'未检测到有效授权');
}
- if($_GET['type'] == 'generate'){
- if(!in_array($_POST['group'] ,['default']) && empty(get_db('user_group','code',['code' => $_POST['group'] ]))){
- msg(-1,'用户组不存在');
- }
-
- $t = time();
- for ($i=1; $i<=$_POST['number']??1; $i++){
- if($_POST['regcode_length'] == 8){
- $regcode = hash("crc32b",uniqid());
- }elseif($_POST['regcode_length'] == 36){
- $regcode = $db::raw("UUID()");
- }else{
- $regcode = md5(uniqid());
- }
- insert_db('regcode_list',["uid"=>UID,"regcode"=>$regcode,"u_group"=>$_POST['group'],"use_state"=>'未使用',"add_time"=>$t,"use_time"=>0]);
- }
-
- msg(1,'注册码已生成');
- }elseif($_GET['type'] == 'set'){
- write_global_config('reg_tips',$_POST['content'],'注册提示');
- msg(1,'保存成功');
- }elseif($_GET['type'] == 'del'){
- delete_db("regcode_list",[ "id" => json_decode($_POST['id'])]);
- msg(1,'删除成功');
- }
-
- msg(-1,'无效的请求类型');
+ msg(1,'请更新系统后再试');
}
//写订阅信息
function write_subscribe(){
global $USER_DB;
- $data['order_id'] = htmlspecialchars( trim($_REQUEST['order_id']) ); //获取订单ID
- $data['email'] = htmlspecialchars( trim($_REQUEST['email']) ); //获取邮箱
- $data['end_time'] = htmlspecialchars( trim($_REQUEST['end_time']) );//到期时间
- $data['domain'] = htmlspecialchars( trim($_REQUEST['domain']) );//支持域名
+ $data = $_POST;
$data['host'] = $_SERVER['HTTP_HOST']; //当前域名
if(empty($data['order_id']) && empty($data['email']) && empty($data['end_time'])){
write_global_config('s_subscribe','','订阅信息');
@@ -504,8 +308,9 @@ function write_subscribe(){
}
}
}
-
+
if(stristr($data['domain'],$data['host'])){
+ //unset($data['public']); // 记得删除
write_global_config('s_subscribe',$data,'订阅信息');
msg(1,'保存成功');
}else{
@@ -527,16 +332,6 @@ function write_sys_settings(){
msg(-1,'默认账号不存在');
}elseif(!empty($_POST['default_UserGroup']) && empty(get_db('user_group','code',['code' => $_POST['default_UserGroup']]))){
msg(-1,'默认分组代号不存在');
- }elseif($_POST['Sub_domain'] == 1){
- if(preg_match('/\.(com|net|org|gov|edu)\.cn$/', $_SERVER["HTTP_HOST"])){
- msg(-1,'不支持此类域名');
- }
- if(filter_var($_SERVER["HTTP_HOST"], FILTER_VALIDATE_IP) != false){
- msg(-1,'不支持IP访问开启二级域名');
- }
- if(preg_match('/\.(\d+|:\d+)$/', preg_replace('/:\d+$/','',$_SERVER['HTTP_HOST'])) || substr_count($_SERVER["HTTP_HOST"],':') > 2){
- msg(-1,'不支持IP访问开启二级域名,如有误判请联系技术支持!');
- }
}
//自定义登录入口和注册入口检测
@@ -547,12 +342,7 @@ function write_sys_settings(){
if(in_array($_POST['Register'],$prohibits)){
msg(-1,'此注册入口名已被系统使用');
}
- //长度限制
- foreach (['c_name','c_desc','l_name','l_url','l_key','l_desc'] as $name){
- $length_limit[$name] = is_subscribe('bool') ? intval($_POST[$name]) : 0;
- }
- write_global_config("length_limit",$length_limit,'长度限制');
-
+
//全局配置
$datas = [
'Login'=>['empty'=>false,'msg'=>'登录入口不能为空'],
@@ -567,23 +357,14 @@ function write_sys_settings(){
'offline'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'离线模式参数错误'],
'Debug'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'调试模式参数错误'],
'Maintenance'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'维护模式参数错误'],
- 'Sub_domain'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'二级域名参数错误'],
- 'Privacy'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'强制私有参数错误'],
'default_page'=>['int'=>true,'min'=>0,'max'=>2,'msg'=>'默认页面参数错误'],
- 'copyright'=>['empty'=>true],
- 'global_header'=>['empty'=>true],
- 'global_footer'=>['empty'=>true],
+
'api_extend'=>['empty'=>true],
'c_code'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'自定义代码参数错误'],
- 'static_link'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'静态链接参数错误'],
//更新设置
'Update_Source'=>['empty'=>true],
'Update_Overtime'=>['int'=>true,'min'=>3,'max'=>60,'msg'=>'资源超时参数错误'],
- //扩展功能-(全局开关)
- 'apply'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'收录管理参数错误'],
- 'guestbook'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'留言管理参数错误'],
- 'link_extend'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'链接扩展参数错误'],
- 'article'=>['int'=>true,'min'=>0,'max'=>2,'msg'=>'文章管理参数错误']
+
];
$o_config = [];
foreach ($datas as $key => $data){
@@ -595,42 +376,9 @@ function write_sys_settings(){
$o_config[$key] = $data['empty']?$_POST[$key]:(!empty($_POST[$key])?$_POST[$key]:msg(-1,$data['msg']));
}
}
- if(!is_subscribe('bool')){
- if($_POST['Sub_domain'] == 1){$o_config['Sub_domain'] = 0;$filter = true;}
- if($_POST['Privacy'] == 1){$o_config['Privacy'] = 0;$filter = true;}
- if(!empty($_POST['copyright'])){$o_config['copyright'] = "";$filter = true;}
- if(!empty($_POST['global_header'])){$o_config['global_header'] = "";$filter = true;}
- if(!empty($_POST['global_footer'])){$o_config['global_footer'] = "";$filter = true;}
- if($_POST['apply'] == 1){$o_config['apply'] = 0;$filter = true;}
- if($_POST['guestbook'] == 1){$o_config['guestbook'] = 0;$filter = true;}
- if($_POST['link_extend'] == 1){$o_config['link_extend'] = 0;$filter = true;}
- if($_POST['article'] == 1){$o_config['article'] = 0;$filter = true;}
- if($_POST['static_link'] == 1){$o_config['static_link'] = 0;$filter = true;}
- }
- //检测于下载文章管理依赖资源
- clearstatcache();
- if($o_config['article'] == 1 && ( !is_file('./static/wangEditor/wangEditor.js') || !is_file('./static/wangEditor/wangEditor.css'))){
- $filePath = "./data/temp/wangEdito.tar.gz";
- if(downFile('https://update.lm21.top/TwoNav/updata/wangEdito.tar.gz','wangEdito.tar.gz','./data/temp/')){
- $file_md5 = md5_file($filePath);
- if($file_md5 != "95f830656ba8972cca39a1ddd6ebaeda"){
- unlink($filePath);
- msg(-1,'效验wangEdito失败
!');
- }
- }else{
- msg(-1,'下载wangEdito失败,请重试!
如需手动安装可联系技术支持!');
- }
- try {
- $phar = new PharData($filePath);
- $phar->extractTo('./static/', null, true);
- unlink($filePath);
- clearstatcache();
- } catch (Exception $e) {
- msg(-1,'安装wangEdito失败');
- }
- }
- update_db("global_config", ["v" => $o_config], ["k" => "o_config"],[1,($filter ?"保存成功,未检测到有效授权,带*号的配置无法为你保存":"保存成功")]);
+
+ update_db("global_config", ["v" => $o_config], ["k" => "o_config"],[1,"免费版可用功能配置已保存!"]);
}
//写默认设置
@@ -639,54 +387,7 @@ function write_default_settings(){
if(!is_subscribe('bool')){
msg(-1,'未检测到有效授权');
}
- if(intval($_POST['Session']) > 0 && intval($_POST['KeyClear']) > intval($_POST['Session'])){
- msg(-1,'Key清理时间不能大于登录保持时间');
- }
- // 安全配置(登录配置)
- $datas = [
- 'Session'=>['int'=>true,'min'=>0,'max'=>360,'msg'=>'登录保持参数错误'],
- 'HttpOnly'=>['int'=>true,'min'=>0,'max'=>1,'msg'=>'HttpOnly参数错误'],
- 'KeySecurity'=>['int'=>true,'min'=>0,'max'=>2,'msg'=>'Key安全参数错误'],
- 'KeyClear'=>['int'=>true,'min'=>1,'max'=>60,'msg'=>'Key清理参数错误'],
- 'api_model'=>['v'=>['security','compatible','compatible+open'],'msg'=>'API模式参数错误'],
- 'login_page'=>['v'=>['admin','index','auto'],'msg'=>'登录成功参数错误']
- ];
- foreach ($datas as $key => $data){
- if($data['int']){
- $LoginConfig[$key] = ($_POST[$key] >= $data['min'] && $_POST[$key] <= $data['max'])?intval($_POST[$key]):msg(-1,$data['msg']);
- }elseif(isset($data['v'])){
- $LoginConfig[$key] = in_array($_POST[$key],$data['v']) ? $_POST[$key]:msg(-1,$data['msg']);
- }else{
- $LoginConfig[$key] = $data['empty']?$_POST[$key]:(!empty($_POST[$key])?$_POST[$key]:msg(-1,$data['msg']));
- }
- }
- $LoginConfig['Login'] = '0';
- $LoginConfig['Password2'] = '';
- update_db("global_config",["v"=>$LoginConfig],["k"=>'LoginConfig']);
-
- //站点配置
- $datas = [
- 'title'=>['empty'=>false,'msg'=>'主标题不能为空'],
- 'subtitle'=>['empty'=>true],
- 'logo'=>['empty'=>true],
- 'keywords'=>['empty'=>true],
- 'description'=>['empty'=>true],
- 'link_model'=>['v'=>['direct','Privacy','302','Transition'],'msg'=>'链接模式参数错误'],
- 'link_icon'=>['int'=>true,'min'=>0,'max'=>6,'msg'=>'链接图标参数错误'],
- 'custom_header'=>['empty'=>true],
- 'custom_footer'=>['empty'=>true]
- ];
- $s_site = [];
- foreach ($datas as $key => $data){
- if($data['int']){
- $s_site[$key] = ($_POST[$key] >= $data['min'] && $_POST[$key] <= $data['max'])?intval($_POST[$key]):msg(-1,$data['msg']);
- }elseif(isset($data['v'])){
- $s_site[$key] = in_array($_POST[$key],$data['v']) ? $_POST[$key]:msg(-1,$data['msg']);
- }else{
- $s_site[$key] = $data['empty']?$_POST[$key]:(!empty($_POST[$key])?$_POST[$key]:msg(-1,$data['msg']));
- }
- }
- update_db("global_config",["v"=>$s_site],["k"=>'s_site'],[1,'保存成功']);
+ msg(1,'请更新系统后再试');
}
//读日志
function read_log(){
@@ -741,45 +442,14 @@ function other_root(){
$data = get_db("global_config", "v", ["k" => "username_retain"]);
msgA(['code'=>1,'msg'=>'获取成功','data'=>$data]);
}elseif($_GET['type'] == 'write_username_retain'){
- //遍历检测语法
- $patterns = explode("\n",$_POST['username_retain']);
- foreach($patterns as $pattern){
- if (@preg_match($pattern, '') === false) {
- msg(-1,'正则表达式语法错误,请检查');
- }
- }
if(!is_subscribe('bool')){
msg(-1,'未检测到有效授权');
}
- write_global_config('username_retain',$_POST['username_retain'],'账号保留');
- msg(1,'保存成功');
+ msg(1,'请更新系统后再试');
}elseif($_GET['type'] == 'write_mail_config'){
if($GLOBALS['global_config']['offline'] == '1'){msg(-1,"离线模式无法使用此功能");}
if(!is_subscribe('bool')){msg(-1,"未检测到有效授权,无法使用该功能!");}
- //检测PHPMailer是否存在
- clearstatcache();
- if(!is_file(DIR.'/system/PHPMailer/PHPMailer.php')){
- $filePath = "./data/temp/PHPMailer_6.8.0.tar.gz";
- if(downFile('https://update.lm21.top/TwoNav/updata/PHPMailer_6.8.0.tar.gz','PHPMailer_6.8.0.tar.gz','./data/temp/')){
- $file_md5 = md5_file($filePath);
- if($file_md5 != "07251997fb7ebf3bf2d296d4214ccf0a"){
- unlink($filePath);
- msg(-1,'效验PHPMailer失败
!');
- }
- }else{
- msg(-1,'下载PHPMailer失败,请重试!
如需手动安装可联系技术支持!');
- }
- try {
- $phar = new PharData($filePath);
- $phar->extractTo('./system/', null, true);
- unlink($filePath);
- clearstatcache();
- } catch (Exception $e) {
- msg(-1,'安装PHPMailer失败');
- }
- }
- write_global_config('mail_config',$_POST,'账号保留');
- msg(1,'保存成功');
+ msg(1,'请更新系统后再试');
}elseif($_GET['type'] == 'write_mail_test'){
$_POST['Subject'] = 'TwoNav 测试邮件' . time();
$_POST['Body'] = '