Skip to content

Commit c76760d

Browse files
committed
Initial commit
1 parent bff0088 commit c76760d

File tree

173 files changed

+16286
-2
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

173 files changed

+16286
-2
lines changed

.gitignore

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Editor directories and files
2+
.idea
3+
.vscode
4+
*.suo
5+
*.ntvs*
6+
*.njsproj
7+
*.sln
8+
9+
.DS_Store
10+
MP_verify_*.txt
11+
install.lock
12+
*config.php*

README.md

+45-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,46 @@
1-
# php-app-domain
1+
# 程江域名管理系统
22

3-
程江域名管理系统
3+
这是一款基于 PHP 语言开发的域名管理系统。
4+
5+
通过本系统可实现实现对所有域名进行管理。
6+
7+
系统后台支持域名添加管理,进行域名基本信息管理、域名订单记录管理、域名 DNS 解析记录管理,域名证书申请和续期管理。
8+
9+
### 部署方法
10+
11+
- 运行环境要求 PHP5.4+,MySQL5.6+
12+
-`src` 目录内文件全部上传到网站运行目录
13+
- 访问网站,会自动跳转到安装页面,根据提示填写配置信息,进行安装
14+
- 安装完成后,访问 /admin 进入后台管理
15+
- 设置伪静态,规则见下方
16+
17+
### 伪静态规则
18+
19+
- Nginx
20+
21+
```nginx
22+
location / {
23+
if (!-e $request_filename) {
24+
rewrite ^(.*)$ /index.php?s=$1 last; break;
25+
}
26+
}
27+
```
28+
29+
- Apache
30+
31+
```xml
32+
<IfModule mod_rewrite.c>
33+
Options +FollowSymlinks -Multiviews
34+
RewriteEngine On
35+
36+
RewriteCond %{REQUEST_FILENAME} !-d
37+
RewriteCond %{REQUEST_FILENAME} !-f
38+
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
39+
</IfModule>
40+
```
41+
42+
### 使用方法
43+
44+
### 版权信息
45+
46+
版权所有 Copyright © 2023 [CROGRAM](https://crogram.com)

src/.htaccess

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<IfModule mod_rewrite.c>
2+
Options +FollowSymlinks -Multiviews
3+
RewriteEngine On
4+
5+
RewriteCond %{REQUEST_FILENAME} !-d
6+
RewriteCond %{REQUEST_FILENAME} !-f
7+
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
8+
</IfModule>

src/admin/ajax.php

+140
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
<?php
2+
define('IN_ADMIN', true);
3+
include("../includes/common.php");
4+
if ($admin_islogin == 1) {
5+
} else exit("<script language='javascript'>window.location.href='./login.php';</script>");
6+
$act = isset($_GET['act']) ? daddslashes($_GET['act']) : null;
7+
8+
if (!checkRefererHost()) exit('{"code":403}');
9+
10+
@header('Content-Type: application/json; charset=UTF-8');
11+
12+
switch ($act) {
13+
case 'stat':
14+
$thtime = date("Y-m-d") . ' 00:00:00';
15+
$domain = $DB->count('domain', array('domain_status' => 1));
16+
$domains = $DB->count('domain');
17+
$orders = $DB->count('order');
18+
$orders_today = $DB->count('order', "create_time>='$thtime'");
19+
$costs = $DB->sum('order', 'order_costs');
20+
21+
$result = ["code" => 0, "domain" => $domain, "domains" => $domains, "orders" => $orders, "orders_today" => $orders_today, "costs" => $costs];
22+
exit(json_encode($result));
23+
break;
24+
case 'cleanlogin':
25+
$lastday = date("Y-m-d", strtotime("-1 day")) . ' 00:00:00';
26+
$tokens = $DB->delete('order', "`create_time` < '$lastday'");
27+
$DB->exec("OPTIMIZE TABLE `pre_order`");
28+
exit('{"code":0,"msg":"删除成功!"}');
29+
break;
30+
case 'set':
31+
// 修改配置
32+
if (isset($_POST['green_label_porn'])) {
33+
$_POST['green_label_porn'] = implode(',', $_POST['green_label_porn']);
34+
}
35+
if (isset($_POST['green_label_terrorism'])) {
36+
$_POST['green_label_terrorism'] = implode(',', $_POST['green_label_terrorism']);
37+
}
38+
foreach ($_POST as $k => $v) {
39+
saveSetting($k, $v);
40+
}
41+
exit('{"code":0,"msg":"保存成功"}');
42+
break;
43+
case 'password':
44+
// 修改密码
45+
$admin_user = isset($_POST['admin_user']) ? trim($_POST['admin_user']) : '';
46+
$admin_pwd = isset($_POST['admin_pwd']) ? trim($_POST['admin_pwd']) : '';
47+
$newpwd = isset($_POST['newpwd']) ? trim($_POST['newpwd']) : '';
48+
$newpwd2 = isset($_POST['newpwd2']) ? trim($_POST['newpwd2']) : '';
49+
50+
if (empty($admin_user)) exit('{"code":-1,"msg":"用户名不能为空"}');
51+
if (empty($admin_pwd)) exit('{"code":-1,"msg":"旧密码不能为空"}');
52+
53+
if ($conf['admin_pwd'] != $admin_pwd) exit('{"code":-1,"msg":"旧密码不正确"}');
54+
// 修改用户名
55+
saveSetting('admin_user', $admin_user);
56+
57+
if (!empty($newpwd) && !empty($newpwd2)) {
58+
// 修改密码
59+
if ($newpwd != $newpwd2) exit('{"code":-1,"msg":"两次新密码输入不一致"}');
60+
saveSetting('admin_pwd', $newpwd2);
61+
$session = md5($admin_user . $newpwd2 . $password_hash);
62+
} else {
63+
$session = md5($admin_user . $admin_pwd . $password_hash);
64+
}
65+
$expiretime = time() + 2592000;
66+
$token = authcode("{$admin_user}\t{$session}\t{$expiretime}", 'ENCODE', SYS_KEY);
67+
ob_clean();
68+
setcookie("admin_token", $token, time() + 2592000);
69+
exit('{"code":0,"msg":"保存成功"}');
70+
break;
71+
case 'iptype':
72+
$result = [
73+
['name' => '0_X_FORWARDED_FOR', 'ip' => real_ip(0), 'city' => get_ip_city(real_ip(0))],
74+
['name' => '1_X_REAL_IP', 'ip' => real_ip(1), 'city' => get_ip_city(real_ip(1))],
75+
['name' => '2_REMOTE_ADDR', 'ip' => real_ip(2), 'city' => get_ip_city(real_ip(2))]
76+
];
77+
exit(json_encode($result));
78+
break;
79+
case 'userList':
80+
$sql = " 1=1";
81+
$type_arr = ['qq' => 'QQ', 'wx' => '微信'];
82+
if (isset($_POST['dstatus']) && $_POST['dstatus'] > -1) {
83+
$dstatus = intval($_POST['dstatus']);
84+
$sql .= " AND `enable`={$dstatus}";
85+
}
86+
if (isset($_POST['kw']) && !empty($_POST['kw'])) {
87+
$type = intval($_POST['type']);
88+
$kw = trim(daddslashes($_POST['kw']));
89+
if ($type == 1) {
90+
$sql .= " AND `uid`='{$kw}'";
91+
} elseif ($type == 2) {
92+
$sql .= " AND `openid`='{$kw}'";
93+
} elseif ($type == 3) {
94+
$sql .= " AND `nickname` LIKE '%{$kw}%'";
95+
} elseif ($type == 4) {
96+
$sql .= " AND `loginip`='{$kw}'";
97+
}
98+
}
99+
$offset = intval($_POST['offset']);
100+
$limit = intval($_POST['limit']);
101+
$total = $DB->getColumn("SELECT count(*) from pre_user WHERE{$sql}");
102+
$list = $DB->getAll("SELECT * FROM pre_user WHERE{$sql} order by uid desc limit $offset,$limit");
103+
$list2 = [];
104+
foreach ($list as $row) {
105+
$row['type'] = $type_arr[$row['type']];
106+
$list2[] = $row;
107+
}
108+
109+
exit(json_encode(['total' => $total, 'rows' => $list2]));
110+
break;
111+
case 'setUserEnable':
112+
$uid = intval($_POST['uid']);
113+
$enable = intval($_POST['enable']);
114+
$sql = "UPDATE pre_user SET enable='$enable' WHERE uid='$uid'";
115+
if ($DB->exec($sql) !== false) exit('{"code":0,"msg":"修改用户成功!"}');
116+
else exit('{"code":-1,"msg":"修改用户失败[' . $DB->error() . ']"}');
117+
break;
118+
case 'saveUserInfo':
119+
$uid = intval($_POST['uid']);
120+
$level = intval($_POST['level']);
121+
$sql = "UPDATE pre_user SET level='$level' WHERE uid='$uid'";
122+
if ($DB->exec($sql) !== false) exit('{"code":0,"msg":"修改用户成功!"}');
123+
else exit('{"code":-1,"msg":"修改用户失败[' . $DB->error() . ']"}');
124+
break;
125+
case 'delUser':
126+
$uid = intval($_POST['uid']);
127+
$row = $DB->getRow("select * from pre_user where uid='$uid' limit 1");
128+
if (!$row)
129+
exit('{"code":-1,"msg":"当前用户不存在!"}');
130+
$sql = "DELETE FROM pre_user WHERE uid='$uid'";
131+
if ($DB->exec($sql)) exit('{"code":0,"msg":"删除文件成功!"}');
132+
else exit('{"code":-1,"msg":"删除文件失败[' . $DB->error() . ']"}');
133+
break;
134+
case 'logout':
135+
setcookie("admin_token", "", time() - 2592000);
136+
exit('{"code":0,"msg":"您已成功注销本次登陆!"}');
137+
default:
138+
exit('{"code":-4,"msg":"No Act"}');
139+
break;
140+
}

src/admin/ajax_domain.php

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
<?php
2+
define('IN_ADMIN', true);
3+
include("../includes/common.php");
4+
if ($admin_islogin == 1) {
5+
} else exit("<script language='javascript'>window.location.href='./login.php';</script>");
6+
// $act=isset($_GET['act'])?daddslashes($_GET['act']):null;
7+
$act = isset($_REQUEST['act']) ? daddslashes($_REQUEST['act']) : null;
8+
if (!checkRefererHost()) exit('{"code":403}');
9+
10+
@header('Content-Type: application/json; charset=UTF-8');
11+
12+
switch ($act) {
13+
case 'list':
14+
$sql = " 1=1";
15+
// $type_arr = array('aliyun' => 'aliyun', 'juming' => '聚名网', 'tencent' => '腾讯', 'xinnet' => '新网');
16+
if (isset($_POST['dstatus']) && $_POST['dstatus'] > -1) {
17+
$dstatus = intval($_POST['dstatus']);
18+
$sql .= " AND `enable`={$dstatus}";
19+
}
20+
if (isset($_POST['kw']) && !empty($_POST['kw'])) {
21+
$kw = trim(daddslashes($_POST['kw']));
22+
$sql .= " AND `domain_name` LIKE '%{$kw}%'";
23+
} else if (isset($_POST['domain_name']) && !empty($_POST['domain_name'])) {
24+
$domain_name = trim(daddslashes($_POST['domain_name']));
25+
$sql .= " AND `domain_name`='{$domain_name}'";
26+
}
27+
$offset = intval($_POST['offset']);
28+
$limit = intval($_POST['limit']);
29+
$total = $DB->count('domain', "{$sql}");
30+
$list = $DB->findAll('domain', '*', $sql, 'domain_id desc', "$offset,$limit");
31+
32+
exit(json_encode(array('code' => 0, 'total' => $total, 'rows' => $list)));
33+
break;
34+
case 'set':
35+
$domain_id = intval($_POST['id']);
36+
$domain_status = intval($_POST['status']);
37+
if (empty($domain_id)) exit('{"code":-1,"msg":"id不能为空"}');
38+
if (!$DB->update('domain', array('domain_status' => $domain_status, 'update_time' => date("Y-m-d H:i:s")), ['domain_id' => $domain_id])) {
39+
exit('{"code":-1,"msg":"修改域名失败[' . $DB->error() . ']"}');
40+
}
41+
exit('{"code":0,"msg":"修改域名成功!"}');
42+
break;
43+
case 'remark':
44+
$domain_id = intval($_POST['id']);
45+
$domain_remark = trim(daddslashes($_POST['remark']));
46+
if (empty($domain_id)) exit('{"code":-1,"msg":"id不能为空"}');
47+
if (!$DB->update('domain', array('domain_remark' => $domain_remark, 'update_time' => date("Y-m-d H:i:s")), ['domain_id' => $domain_id])) {
48+
exit('{"code":-1,"msg":"修改备注失败[' . $DB->error() . ']"}');
49+
}
50+
exit('{"code":0,"msg":"修改备注成功!"}');
51+
break;
52+
case 'add':
53+
$domain_name = trim(daddslashes($_POST['domain']));
54+
if (empty($domain_name)) exit('{"code":-1,"msg":"域名不能为空"}');
55+
if (!checkDomain($domain_name)) exit('{"code":-1,"msg":"域名格式不正确"}');
56+
57+
$row = $DB->find('domain', 'domain_id', ['domain_name' => $domain_name]);
58+
if ($row) exit('{"code":-1,"msg":"该域名已存在,请勿重复添加"}');
59+
60+
if (!$DB->insert('domain', array(
61+
'domain_name' => $domain_name,
62+
'domain_status' => 1,
63+
'update_time' => date("Y-m-d H:i:s")
64+
))) exit('{"code":-1,"msg":"添加域名失败[' . $DB->error() . ']"}');
65+
exit('{"code":0,"msg":"添加域名成功!"}');
66+
break;
67+
case 'del':
68+
$domain_id = intval($_POST['id']);
69+
$row = $DB->getRow("select * from pre_domain where domain_id='$domain_id' limit 1");
70+
if (!$row) exit('{"code":-1,"msg":"当前域名不存在!"}');
71+
$sql = "DELETE FROM pre_domain WHERE domain_id='$domain_id'";
72+
if ($DB->exec($sql)) exit('{"code":0,"msg":"删除域名成功!"}');
73+
else exit('{"code":-1,"msg":"删除域名失败[' . $DB->error() . ']"}');
74+
break;
75+
case 'whois':
76+
if (!isset($_POST['domain'])) {
77+
exit('{"code":-1,"msg":"请输入查询域名!"}');
78+
}
79+
$domain = strip_tags($_POST['domain']);
80+
81+
include_once(SYSTEM_ROOT . '/phpwhois/whois.main.php');
82+
include_once(SYSTEM_ROOT . '/phpwhois/whois.utils.php');
83+
84+
$whois = new Whois();
85+
$allowproxy = false;
86+
$whois->deep_whois = false;
87+
$whois->non_icann = true;
88+
$result = $whois->Lookup($domain);
89+
$winfo = '';
90+
91+
if (!empty($result['rawdata'])) {
92+
// $winfo .= '<pre>' . implode($result['rawdata'], "\n") . '</pre>';
93+
$winfo .= implode($result['rawdata'], "\n");
94+
} else {
95+
$winfo = implode($whois->Query['errstr'], "\n<br></br>");
96+
}
97+
exit(json_encode(array('code' => 0, 'data' => $winfo)));
98+
break;
99+
default:
100+
exit('{"code":-4,"msg":"未定义操作"}');
101+
break;
102+
}

src/admin/ajax_order.php

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
define('IN_ADMIN', true);
3+
include("../includes/common.php");
4+
if ($admin_islogin == 1) {
5+
} else exit("<script language='javascript'>window.location.href='./login.php';</script>");
6+
// $act=isset($_GET['act'])?daddslashes($_GET['act']):null;
7+
$act = isset($_REQUEST['act']) ? daddslashes($_REQUEST['act']) : 'list';
8+
if (!checkRefererHost()) exit('{"code":403}');
9+
10+
@header('Content-Type: application/json; charset=UTF-8');
11+
12+
switch ($act) {
13+
case 'list':
14+
$sql = " 1=1";
15+
$order_domain = trim($_POST['domain']);
16+
$order_from = trim($_POST['order_from']);
17+
$order_type = trim($_POST['type']);
18+
19+
if (!empty($order_domain)) {
20+
$sql .= " AND order_domain='{$order_domain}'";
21+
}
22+
if (!empty($order_from)) {
23+
$sql .= " AND order_from='{$order_from}'";
24+
}
25+
if (!empty($order_type)) {
26+
$sql .= " AND `order_type`='{$order_type}'";
27+
}
28+
$offset = intval($_POST['offset']);
29+
$limit = intval($_POST['limit']);
30+
$total = $DB->count('order', $sql);
31+
$list = $DB->findAll('order', '*', $sql, 'create_time desc', "$offset,$limit");
32+
33+
exit(json_encode(['total' => $total, 'rows' => $list]));
34+
break;
35+
// $sql = " A.status=0";
36+
// $domain = trim($_POST['domain']);
37+
// $did = intval($_POST['did']);
38+
// $appid = trim($_POST['appid']);
39+
40+
// // TODO 域名删除后就找不到了,此处不能用关联存储,直接存储到表
41+
// if (!empty($domain)) {
42+
// $sql .= " AND B.domain='{$domain}'";
43+
// } elseif (!empty($did)) {
44+
// $sql .= " AND A.did='{$did}'";
45+
// }
46+
// if (!empty($appid)) {
47+
// $sql .= " AND `appid`='{$appid}'";
48+
// }
49+
// $offset = intval($_POST['offset']);
50+
// $limit = intval($_POST['limit']);
51+
// $total = $DB->getColumn("SELECT count(A.id) FROM pre_order A JOIN pre_domain B ON A.did=B.id WHERE{$sql}");
52+
// $list = $DB->getAll("SELECT A.*,B.domain FROM pre_order A JOIN pre_domain B ON A.did=B.id WHERE{$sql} order by A.id desc limit $offset,$limit");
53+
54+
// exit(json_encode(['total' => $total, 'rows' => $list]));
55+
// break;
56+
default:
57+
exit('{"code":-4,"msg":"No Act"}');
58+
break;
59+
}

0 commit comments

Comments
 (0)