better-staridc-MNBT
1<?php
2if($egn=='cxtj') {
3 //一键部署添加
4 $cxname=daddslashes($_POST['cxname']);
5 //程序名称
6 $cxjs=daddslashes($_POST['cxjs']);
7 //程序介绍
8 $cxrmb=daddslashes($_POST['cxrmb']);
9 //程序价格
10 $cxwebkj=daddslashes($_POST['cxwebkj']);
11 //程序所需最低网页空间
12 $cxsqlkj=daddslashes($_POST['cxsqlkj']);
13 //程序所需最低数据库空间
14 $alerts=daddslashes($_POST['alerts']);
15 //程序部署完成后的提示
16 $kg=daddslashes($_POST['kg']);
17 //程序是否上架
18 if($kg=='on' || $kg=='true') {
19 $kg='true';
20 } else {
21 $kg='false';
22 }
23 //开关所代表的意思进行修改
24 if(!isset($cxname) || !isset($cxjs) || !isset($cxrmb) || !isset($cxwebkj) || !isset($cxsqlkj) || !isset($kg) || $_FILES['filecx']=='') {
25 exit('{"code":100,"msg":"禁止留空"}');
26 }
27 $rowse=$DB->get_row_prepare("SELECT * FROM MN_bs WHERE name=? limit 1", [$cxname]);
28 if(isset($rowse)) {
29 exit('{"code":100,"msg":"该程序名称已被其他程序占用"}');
30 }
31 $wjdhlmym=strtolower(substr(strrchr($_FILES['filecx']['name'], '.'), 1));
32 //获取文件标识名并转换为小写
33 if($wjdhlmym!='zip' && $wjdhlmym!='7z' && $wjdhlmym!='rar' && $wjdhlmym!='gzip' && $wjdhlmym!='jar') {
34 exit('{"code":100,"msg":"源码类型错误:目前仅支持zip,7z,rar,gzip,jar类型的压缩包"}');
35 }
36 if(is_dir('../filecx')) {
37 } else {
38 mkdir('../filecx');
39 }
40 //判断根目录下的filecx文件夹是否存在
41 for ($isx=1;$isx<200;$isx++) {
42 $sf = $date.mt_rand(16,999).$cxname.$cxjs.$cxarmb;
43 $rqsj=md5($sf);
44 $hsks=mt_rand(0,5);
45 $hskr=mt_rand(6,10);
46 $wjjm=substr($rqsj, $hsks , 8);
47 //算法计算文件夹名称
48 if(!is_dir('../filecx/'.$wjjm)) {
49 $isx=2000;
50 break;
51 }
52 //避免目录名称重复
53 }
54 $sfjgf='../filecx/'.$wjjm;
55 //此程序所在的文件夹
56 mkdir($sfjgf);
57 //新建文件夹
58 //下面开始程序源码的保存
59 $cxxiname=$sfjgf.'/'.'cxym.'.$wjdhlmym;
60 //源码文件的路径以及名称
61 copy($_FILES['filecx']['tmp_name'],$cxxiname);
62 //拷贝文件
63 unlink($_FILES['filecx']['tmp_name']);
64 //删除原文件
65 //程序的保存到此结束 程序的源码名称统一为cxym标识名取原名称
66 unset($_FILES['filecx']);
67 //去掉上传的程序源码的数组
68 mkdir($sfjgf.'/tp');
69 //在程序文件夹中新建一个文件夹用来存储图片
70 $acft='0';
71 //新建一个变量用来标识每张图片的名称每次循环完成后都会+1
72 $szaie=array();
73 //创建一个空的数组
74 foreach ($_FILES['imgfile']['tmp_name'] as $aryqs=>$_value) {
75 //下面开始图片的保存
76 $cxxname=$sfjgf.'/tp/'.$acft.'.'.substr(strrchr($_FILES['imgfile']['name'][$aryqs], '.'), 1);
77 //图片文件的路径以及名称
78 copy($_value,$cxxname);
79 //拷贝图片
80 unlink($_value);
81 //删除原文件
82 //图片的保存到此结束 图片的名称为1,2,3依次排序
83 $acft++;
84 //变量+1
85 array_push($szaie,$cxxname);
86 //插入一个字符串
87 }
88 $fn_cz=$_POST['czf'];
89 foreach ($fn_cz as $xbd=>$val) {
90 if($val['cz']=='setwj' || $val['cz']=='setwjt') {
91 //判断操作是否为修改文件内容
92 $wjszwz=$sfjgf.'/setwj';
93 //此操作文件的所在位置
94 mkdir($wjszwz);
95 //新建文件
96 file_put_contents ($wjszwz.'/'.$xbd.'.setwj',$val['nr']);
97 //写入文件内容
98 $fn_cz[$xbd]['nr']=$wjszwz.'/'.$xbd.'.setwj';
99 //修改数组
100 }
101 }
102 $jsonzd=json_encode(array($cxwebkj,$cxsqlkj));
103 //程序所需最低配置
104 $jsonsjz=json_encode($fn_cz,256);
105 //程序的安装配置
106 $jsonipt=daddslashes(json_encode($_POST['bdf'],256));
107 //安装前表单填写的配置
108 $jsontp=daddslashes(json_encode($szaie,256));
109 //程序的图片
110 $rowe=$DB->get_row_prepare("SELECT * FROM MN_bs WHERE 1 order by id desc limit 1");
111 $id=$rowe['id']+1;
112 $tj=json_encode(array());
113 if($DB->query_prepare("INSERT INTO `MN_bs` (`id`, `name`, `jc`, `src`, `date`, `cxwz`, `sxpz`, `tj`, `jg`, `inp`, `pz`, `alet`, `qk`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", [$id, $cxname, $cxjs, $jsontp, $date, $cxxiname, $jsonzd, $tj, $cxrmb, $jsonipt, $jsonsjz, $alerts, $kg])) {
114 exit('{"code":200,"msg":"添加成功!"}');
115 } else {
116 exit('{"code":100,"msg":"添加失败'.$DB->error().'"}');
117 }
118 return;
119}
120if($egn=='cxxgjl') {
121 $id=daddslashes($_POST['id']);
122 $name=daddslashes($_POST['cxname']);
123 $jc=daddslashes($_POST['cxjc']);
124 $web=daddslashes($_POST['webkj']);
125 $sql=daddslashes($_POST['sqlkj']);
126 $jg=daddslashes($_POST['cxrmb']);
127 $alerts=daddslashes($_POST['alerts']);
128 $kg=daddslashes($_POST['cxkg']);
129 $websql=json_encode(array($web,$sql));
130 $cres=$DB->get_row_prepare("SELECT * FROM MN_bs WHERE id=? limit 1", [$id]);
131 $fn_cz=$_POST['czf'];
132 foreach ($fn_cz as $xbd=>$val) {
133 if($val['cz']=='setwj' || $val['cz']=='setwjt') {
134 //判断操作是否为修改文件内容
135 $sfjgf='../filecx/'.explode("/",$cres['cxwz'])[2];
136 $wjszwz=$sfjgf.'/setwj';
137 //此操作文件的所在位置
138 @unlink($wjszwz.'/'.$xbd.'.setwj');
139 //删除文件
140 if(is_dir($wjszwz)) {
141 } else {
142 mkdir($wjszwz);
143 }
144 //判断setwj文件夹是否存在
145 file_put_contents ($wjszwz.'/'.$xbd.'.setwj',$val['nr']);
146 //新建并写入文件内容
147 $fn_cz[$xbd]['nr']=$wjszwz.'/'.$xbd.'.setwj';
148 //修改数组
149 }
150 }
151 $jsonsjz=json_encode($fn_cz,256);
152 //程序的安装配置
153 $jsonipt=json_encode($_POST['bdf'],256);
154 //安装前表单填写的配置
155 if($DB->query_prepare("update `MN_bs` set `name` =?, `jc` =?, `jg` =?, `inp` =?, `sxpz` =?, `qk` =?, `pz`=?, `alet`=? where `id`=?", [$name, $jc, $jg, $jsonipt, $websql, $kg, $jsonsjz, $alerts, $id]))json_exit('修改成功'); else json_exit('修改失败!');
156 return;
157}
158if($egn=='cxsc') {
159 $id=$_POST['id'];
160 $val=$DB->get_row_prepare("SELECT * FROM MN_bs WHERE id=? limit 1", [$id]);
161 if(explode("/",$val['cxwz'])[2]!=null) {
162 deldir('../filecx/'.explode("/",$val['cxwz'])[2]);
163 }
164 if($DB->query_prepare("DELETE FROM MN_bs WHERE id=? limit 1", [$id]))json_exit('删除成功'); else json_exit('删除失败'.$DB->error());
165 return;
166}
167if($egn=='cxscxz') {
168 $idsz=$_POST['idsz'];
169 $scqkr=0;
170 $scqke=0;
171 foreach($idsz as $id) {
172 $val=$DB->get_row_prepare("SELECT * FROM MN_bs WHERE id=? limit 1", [$id]);
173 if($DB->query_prepare("DELETE FROM MN_bs WHERE id=? limit 1", [$id])) {
174 if(explode("/",$val['cxwz'])[2]!=null) {
175 deldir('../filecx/'.explode("/",$val['cxwz'])[2]);
176 }
177 $scqke++;
178 } else $scqkr++;
179 }
180 json_exit($scqke, ['codr' => $scqkr]);
181 return;
182}
183if($egn=='listbs') {
184 //程序列表
185 $sorting=strtoupper($_POST['sortOrder']??'')==='DESC'?'DESC':'ASC';
186 $paixu=preg_replace('/[^a-zA-Z0-9_]/','',$_POST['sort']??'id')?:'id';
187 $pagesize=intval($_POST['limit']);
188 $pageu=(intval($_POST['page'])-1) * $pagesize;
189 $countdata=$DB->count_prepare("SELECT count(*) from MN_bs WHERE 1");
190 $data=["total"=>$countdata];
191 $data["rows"]=$DB->get_all_prepare("SELECT * FROM MN_bs order by $paixu $sorting limit $pageu,$pagesize");
192 foreach ($data["rows"] as &$res) {
193 $res['cxdx']=sprintf( "%.2f ",filesize($res['cxwz'])/1048576);
194 $fn_cz=json_decode($res['pz'],true);
195 if($fn_cz!=null) {
196 foreach ($fn_cz as $xbd=>$val) {
197 if($val['cz']=='setwj' || $val['cz']=='setwjt') {
198 $fn_cz[$xbd]['nr']=file_get_contents($val['nr']);
199 }
200 }
201 $res['pz']=json_encode($fn_cz,256);
202 }
203 }
204 unset($res);
205 exit(json_encode($data));
206 return;
207}
208if($egn=='cxdc') {
209 //程序导出
210 include("../MPHX/BL.php");
211 $ids=daddslashes($_POST['id']);
212 $dccg=0;
213 $dcsb=0;
214 //导出成功次数和导出失败次数
215 $zipfile='../filecx/export_file.zip';
216 //压缩包存放目录
217 @unlink($zipfile);
218 //删除原来的一个压缩包
219 foreach ($ids as $id) {
220 $cres=$DB->get_row_prepare("SELECT * FROM MN_bs WHERE id=? limit 1", [$id]);
221 if($cres==false)exit(json_encode(["code"=>4,"code"=>"错误!程序不存在!"]));
222 $arr=[];
223 $arr['vs']=$WEBQB;
224 $arr['config']=$cres;
225 $fileconfig=json_encode($arr,256);
226 //配置信息,中文不转义
227 $cxpath='../filecx/'.explode("/",$cres['cxwz'])[2];
228 //程序所在目录
229 $zipqk=zipfile($cxpath,'../filecx/export_file.zip','/',$fileconfig);
230 if($zipqk['code']==1) {
231 $dccg++;
232 } else {
233 $dcsb++;
234 }
235 }
236 exit(json_encode(['code'=>1,'msg'=>"打包成功<b>$dccg</b>个程序,打包失败<b class='text-danger'>$dcsb</b>个程序"],256));
237 return;
238}
239if($egn=='cxfiledru') {
240 //程序导入
241 include("../MPHX/BL.php");
242 $ysize=daddslashes($_POST['fesw']);
243 //已经上传的大小
244 $zsize=daddslashes($_POST['zsize']);
245 //总大小
246 $file=$_FILES['file'];
247 //文件
248 $tmp_path='../filecx/file_import_tmp';
249 //导入文件解压后的临时存放位置
250 $filepath='../filecx/import_file.zip';
251 //压缩包存放目录和文件名
252 if(is_dir($tmp_path))deldir($tmp_path);
253 //删除临时目录
254 if(!is_dir($tmp_path))mkdir($tmp_path);
255 //新建目录
256 if($ysize==0) {
257 @unlink($filepath);
258 //删除上一次的导入文件
259 }
260 if(filesize($filepath)<$zsize) {
261 $files=file_get_contents($file['tmp_name']);
262 //读取
263 file_put_contents($filepath, $files, FILE_APPEND | LOCK_EX);
264 //写入
265 @unlink($file['tmp_name']);
266 //删除
267 }
268 $filesizes=filesize($filepath);
269 if($filesizes>$zsize)exit(json_encode(['error'=>1,'size'=>4,'msg'=>'抱歉,我们遇见了一个未知的错误!请重新导入!']));
270 if($filesizes<$zsize) {
271 //上传未完成,通知继续上传
272 exit(json_encode(['error'=>0,'size'=>$filesizes]));
273 }
274 //解压文件
275 $zip = new \ZipArchive;
276 if($zip->open($filepath)===true) {
277 //打开
278 $zip->extractTo($tmp_path);
279 //解压
280 $zip->close();
281 //关闭
282 @unlink($filepath);
283 //删除压缩包
284 } else {
285 @unlink($filepath);
286 //删除压缩包
287 exit(json_encode(['error'=>1,'size'=>4,'msg'=>'错误!压缩包打开失败!']));
288 }
289 //读取数据导入文件
290 $imptlist=scandir($tmp_path);
291 //导入的文件列表
292 $filelist=scandir('../filecx');
293 //原来的文件列表
294 if($imptlist[0]=='.')unset($imptlist[0]);
295 if($imptlist[1]=='..')unset($imptlist[1]);
296 if(empty($imptlist))exit(json_encode(['error'=>1,'size'=>4,'msg'=>'错误!导入文件不存在!']));
297 $drcgf=0;
298 $drsbf=0;
299 //成功,失败
300 foreach ($imptlist as $val) {
301 if(in_array($val,$filelist)) {
302 $drsbf++;
303 continue;
304 }
305 $path=$tmp_path.'/'.$val;
306 //导入的文件的目录
307 $config_file=$path.'/mnbt_file_conf.json';
308 //配置文件
309 if(!is_file($config_file)) {
310 $drsbf++;
311 continue;
312 }
313 $config=json_decode(file_get_contents($config_file),true)['config'];
314 //读取配置文件
315 if(!$config) {
316 $drsbf++;
317 continue;
318 }
319 @unlink($config_file);
320 $columns = [];
321 $placeholders = [];
322 $params = [];
323 foreach ($config as $k=>$v) {
324 if($k=='id') {
325 $rowe=$DB->get_row_prepare("SELECT * FROM MN_bs WHERE 1 order by id desc limit 1");
326 $v=$rowe['id']+1;
327 }
328 if($k=='qk')$v=$_POST['sxj'];
329 if($k=='name') {
330 $rowse=$DB->get_row_prepare("SELECT * FROM MN_bs WHERE name=? limit 1", [$cxname]);
331 if(isset($rowse)) {
332 $columns = false;
333 break;
334 }
335 }
336 if ($columns !== false) {
337 $columns[] = '`'.$k.'`';
338 $placeholders[] = '?';
339 $params[] = $v;
340 }
341 }
342 if(!$columns || !$params) {
343 $drsbf++;
344 continue;
345 }
346 $sql = "INSERT INTO `MN_bs` (".implode(',', $columns).") VALUES (".implode(',', $placeholders).")";
347 if(!rename($path,'../filecx/'.$val)) {
348 $drsbf++;
349 continue;
350 }
351 if($DB->query_prepare($sql, $params)) {
352 $drcgf++;
353 } else {
354 $drsbf++;
355 //失败
356 if(is_dir('../filecx/'.$val))deldir('../filecx/'.$val);
357 }
358 }
359 //删除临时目录
360 if(is_dir($tmp_path))deldir($tmp_path);
361 exit(json_encode(['error'=>1,'size'=>1,'msg'=>'导入成功<b>'.$drcgf.'</b>个程序!导入失败<b class="text-danger">'.$drsbf.'</b>个程序!']));
362 return;
363}
364return;