PageRenderTime 43ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/backup/class/combakfun.php

https://github.com/westeast/xwdede
PHP | 473 lines | 420 code | 20 blank | 33 comment | 58 complexity | 8d2299ce7d4f5168328e7561e90a11e8 MD5 | raw file
  1. <?php
  2. //参数设置
  3. function Ebak_SetDb($add){
  4. global $phome_db_password,$set_password,$phome_db_dbname;
  5. if(empty($add['outtime']))
  6. {
  7. $add['outtime']=60;
  8. }
  9. //修改密码
  10. if(empty($add['dbpassword']))
  11. {
  12. $add['dbpassword']=$phome_db_password;
  13. }
  14. elseif($add['dbpassword']=='null')
  15. {
  16. $add['dbpassword']='';
  17. }
  18. $dblocalhost=$add['dbhost'];
  19. //端口
  20. if($add['dbport'])
  21. {
  22. $dblocalhost.=":".$add['dbport'];
  23. }
  24. $link=@mysql_connect($dblocalhost,$add['dbusername'],$add['dbpassword']);
  25. if(empty($link))
  26. {
  27. printerror("FailDbuser","history.go(-1)");
  28. }
  29. //默认数据库
  30. if($add['dbname'])
  31. {
  32. if($add['dbname']!=$phome_db_dbname)
  33. {
  34. $usedb=@mysql_query("use `".$add['dbname']."`");
  35. if(!$usedb)
  36. {
  37. printerror("NotDb","history.go(-1)");
  38. }
  39. }
  40. }
  41. //mysql版本
  42. if($add['mysqlver']=='auto')
  43. {
  44. $add['mysqlver']=Ebak_GetMysqlVerForDb();
  45. if(empty($add['mysqlver']))
  46. {
  47. printerror("NotAutoDbVer","history.go(-1)");
  48. }
  49. }
  50. //修改密码
  51. if($add['adminpassword'])
  52. {
  53. $add['adminpassword']=md5($add['adminpassword']);
  54. $a="\$set_password=\"".addslashes($add['adminpassword'])."\";\r\n";
  55. }
  56. else
  57. {
  58. $add['adminpassword']=$set_password;
  59. }
  60. //目录
  61. if(empty($add['sbakpath']))
  62. {
  63. $add['sbakpath']="bdata";
  64. }
  65. if(!file_exists(RepPathStr($add['sbakpath'])))
  66. {
  67. printerror("NotBakpath","history.go(-1)");
  68. }
  69. if(empty($add['sbakzippath']))
  70. {
  71. $add['sbakzippath']="zip";
  72. }
  73. if(!file_exists(RepPathStr($add['sbakzippath'])))
  74. {
  75. printerror("NotZippath","history.go(-1)");
  76. }
  77. if(empty($add['sebaklang']))
  78. {
  79. $add['sebaklang']='gb,gbk';
  80. }
  81. $langr=explode(',',$add['sebaklang']);
  82. $string="<?php
  83. if(!defined('InEmpireBak'))
  84. {
  85. exit();
  86. }
  87. //Database
  88. \$phome_db_ver=\"".addslashes($add['mysqlver'])."\";
  89. \$phome_db_server=\"".addslashes($add['dbhost'])."\";
  90. \$phome_db_port=\"".addslashes($add['dbport'])."\";
  91. \$phome_db_username=\"".addslashes($add['dbusername'])."\";
  92. \$phome_db_password=\"".addslashes($add['dbpassword'])."\";
  93. \$phome_db_dbname=\"".addslashes($add['dbname'])."\";
  94. \$baktbpre=\"".addslashes($add['sbaktbpre'])."\";
  95. \$phome_db_char=\"".addslashes($add['dbchar'])."\";
  96. //USER
  97. \$set_username=\"".addslashes($add['adminusername'])."\";
  98. \$set_password=\"".addslashes($add['adminpassword'])."\";
  99. \$set_loginauth=\"".addslashes($add['adminloginauth'])."\";
  100. \$set_loginrnd=\"".addslashes($add['adminloginrnd'])."\";
  101. \$set_outtime=\"".addslashes($add['outtime'])."\";
  102. \$set_loginkey=\"".addslashes($add['loginkey'])."\";
  103. //COOKIE
  104. \$phome_cookiedomain=\"".addslashes($add['ckdomain'])."\";
  105. \$phome_cookiepath=\"".addslashes($add['ckpath'])."\";
  106. \$phome_cookievarpre=\"".addslashes($add['ckvarpre'])."\";
  107. //LANGUAGE
  108. \$langr=ReturnUseEbakLang();
  109. \$ebaklang=\$langr['lang'];
  110. \$ebaklangchar=\$langr['langchar'];
  111. //BAK
  112. \$bakpath=\"".addslashes($add['sbakpath'])."\";
  113. \$bakzippath=\"".addslashes($add['sbakzippath'])."\";
  114. \$filechmod=\"".addslashes($add['sfilechmod'])."\";
  115. \$phpsafemod=\"".addslashes($add['sphpsafemod'])."\";
  116. \$php_outtime=\"".addslashes($add['sphp_outtime'])."\";
  117. \$limittype=\"".addslashes($add['slimittype'])."\";
  118. \$canlistdb=\"".addslashes($add['scanlistdb'])."\";
  119. //------------ SYSTEM ------------
  120. HeaderIeChar();
  121. ?>";
  122. $filename="class/config.php";
  123. WriteFiletext_n($filename,$string);
  124. printerror("SetDbSuccess","SetDb.php");
  125. }
  126. //修复表
  127. function Ebak_Rep($tablename,$dbname){
  128. global $empire;
  129. $dbname=RepPostVar($dbname);
  130. $empire->query("use `$dbname`");
  131. $count=count($tablename);
  132. if(empty($count))
  133. {
  134. printerror("EmptyChangeTb","history.go(-1)");
  135. }
  136. for($i=0;$i<$count;$i++)
  137. {
  138. $sql1=$empire->query("REPAIR TABLE `$tablename[$i]`;");
  139. }
  140. printerror("RepairTbSuccess","ChangeTable.php?mydbname=$dbname");
  141. }
  142. //忧化表
  143. function Ebak_Opi($tablename,$dbname){
  144. global $empire;
  145. $dbname=RepPostVar($dbname);
  146. $empire->query("use `$dbname`");
  147. $count=count($tablename);
  148. if(empty($count))
  149. {
  150. printerror("EmptyChangeTb","history.go(-1)");
  151. }
  152. for($i=0;$i<$count;$i++)
  153. {
  154. $sql1=$empire->query("OPTIMIZE TABLE `$tablename[$i]`;");
  155. }
  156. printerror("OptimizeTbSuccess","ChangeTable.php?mydbname=$dbname");
  157. }
  158. //删除数据表
  159. function Ebak_Drop($tablename,$dbname){
  160. global $empire;
  161. $dbname=RepPostVar($dbname);
  162. $empire->query("use `$dbname`");
  163. $count=count($tablename);
  164. if(empty($count))
  165. {printerror("EmptyChangeDelTb","history.go(-1)");}
  166. $a="";
  167. $first=1;
  168. for($i=0;$i<$count;$i++)
  169. {
  170. if(empty($first))
  171. {
  172. $a.=",";
  173. }
  174. else
  175. {
  176. $first=0;
  177. }
  178. $a.="`".$tablename[$i]."`";
  179. }
  180. $sql1=$empire->query("DROP TABLE IF EXISTS ".$a.";");
  181. printerror("DelTbSuccess","ChangeTable.php?mydbname=$dbname");
  182. }
  183. //删除数据库
  184. function Ebak_DropDb($dbname){
  185. global $empire;
  186. $dbname=RepPostVar($dbname);
  187. if(empty($dbname))
  188. {
  189. printerror("NotChangeDelDb","history.go(-1)");
  190. }
  191. $sql=$empire->query("DROP DATABASE `$dbname`");
  192. if($sql)
  193. {
  194. printerror("DelDbSuccess","ChangeDb.php");
  195. }
  196. else
  197. {printerror("DbError","history.go(-1)");}
  198. }
  199. //建立数据库
  200. function Ebak_CreatDb($dbname,$dbchar=''){
  201. global $empire,$phome_db_ver;
  202. $dbname=RepPostVar($dbname);
  203. if(!trim($dbname))
  204. {
  205. printerror("EmptyDbname","history.go(-1)");
  206. }
  207. $a="";
  208. if($dbchar&&$phome_db_ver>='4.1')
  209. {
  210. $a=" DEFAULT CHARACTER SET ".$dbchar;
  211. }
  212. $sql=$empire->query("CREATE DATABASE IF NOT EXISTS `$dbname`".$a);
  213. if($sql)
  214. {
  215. printerror("CreateDbSuccess","ChangeDb.php");
  216. }
  217. else
  218. {printerror("DbError","history.go(-1)");}
  219. }
  220. //清空表
  221. function Ebak_EmptyTable($tablename,$dbname){
  222. global $empire;
  223. $dbname=RepPostVar($dbname);
  224. $empire->query("use `$dbname`");
  225. $count=count($tablename);
  226. if(empty($count))
  227. {printerror("EmptyChangeTb","history.go(-1)");}
  228. for($i=0;$i<$count;$i++)
  229. {
  230. $sql1=$empire->query("TRUNCATE `".$tablename[$i]."`;");
  231. }
  232. printerror("TruncateTbSuccess","ChangeTable.php?mydbname=$dbname");
  233. }
  234. //批量替换表名
  235. function Ebak_ReplaceTable($tablename,$oldpre,$newpre,$dbname){
  236. global $empire;
  237. if(!$oldpre)
  238. {
  239. printerror("EmptyReplaceTablePre","history.go(-1)");
  240. }
  241. $dbname=RepPostVar($dbname);
  242. $empire->query("use `$dbname`");
  243. $count=count($tablename);
  244. if(empty($count))
  245. {
  246. printerror("EmptyChangeTb","history.go(-1)");
  247. }
  248. for($i=0;$i<$count;$i++)
  249. {
  250. $newtbname=str_replace($oldpre,$newpre,$tablename[$i]);
  251. $empire->query("ALTER TABLE `".$tablename[$i]."` RENAME `".$newtbname."`;");
  252. }
  253. printerror("ReplaceTbSuccess","ChangeTable.php?mydbname=$dbname");
  254. }
  255. //保存设置
  256. function Ebak_SaveSeting($add){
  257. $savename=$add['savename'];
  258. if(strstr($savename,'.')||strstr($savename,'/')||strstr($savename,"\\"))
  259. {
  260. printerror("FailSetSavename","history.go(-1)");
  261. }
  262. $baktype=(int)$add['baktype'];
  263. $filesize=(int)$add['filesize'];
  264. $bakline=(int)$add['bakline'];
  265. $autoauf=(int)$add['autoauf'];
  266. $bakstru=(int)$add['bakstru'];
  267. $bakstrufour=(int)$add['bakstrufour'];
  268. $beover=(int)$add['beover'];
  269. $add['waitbaktime']=(int)$add['waitbaktime'];
  270. $bakdatatype=(int)$add['bakdatatype'];
  271. //表列表
  272. $tblist="";
  273. $tablename=$add['tablename'];
  274. $count=count($tablename);
  275. if($count)
  276. {
  277. for($i=0;$i<$count;$i++)
  278. {
  279. $tblist.=$tablename[$i].",";
  280. }
  281. $tblist=",".$tblist;
  282. }
  283. $str="<?php
  284. \$dbaktype=".$baktype.";
  285. \$dfilesize=".$filesize.";
  286. \$dbakline=".$bakline.";
  287. \$dautoauf=".$autoauf.";
  288. \$dbakstru=".$bakstru.";
  289. \$dbakstrufour=".$bakstrufour.";
  290. \$ddbchar='".addslashes($add['dbchar'])."';
  291. \$dmypath='".addslashes($add['mypath'])."';
  292. \$dreadme=\"".addslashes(stripSlashes($add['readme']))."\";
  293. \$dautofield='".addslashes($add['autofield'])."';
  294. \$dtblist='".addslashes($tblist)."';
  295. \$dbeover=".$beover.";
  296. \$dinsertf='".addslashes($add['insertf'])."';
  297. \$dmydbname='".addslashes($add['mydbname'])."';
  298. \$dkeyboard='".addslashes($add['keyboard'])."';
  299. \$dwaitbaktime='".$add['waitbaktime']."';
  300. \$dbakdatatype=".$bakdatatype.";
  301. ?>";
  302. $file="setsave/".$savename;
  303. WriteFiletext_n($file,$str);
  304. printerror("SetSaveSuccess","history.go(-1)");
  305. }
  306. //删除设置
  307. function Ebak_DelSeting($add){
  308. $savename=$add['savename'];
  309. if(strstr($savename,'.')||strstr($savename,'/')||strstr($savename,"\\"))
  310. {
  311. printerror("FailSetSavename","history.go(-1)");
  312. }
  313. $file="setsave/".$savename;
  314. DelFiletext($file);
  315. printerror("DelSaveSetSuccess","ListSetbak.php?mydbname=$add[mydbname]&change=$add[change]");
  316. }
  317. //删除备份目录
  318. function Ebak_DelBakpath($path){
  319. global $bakpath;
  320. if(strstr($path,".."))
  321. {printerror("NotChangeDelPath","history.go(-1)");}
  322. if(!trim($path))
  323. {printerror("NotChangeDelPath","history.go(-1)");}
  324. $delpath=$bakpath."/".$path;
  325. if(!file_exists($delpath))
  326. {
  327. printerror("DelPathNotExists","history.go(-1)");
  328. }
  329. $delpath=DelPath($delpath);
  330. printerror("DelPathSuccess","ChangePath.php?change=".$_GET['change']);
  331. }
  332. //删除压缩包
  333. function Ebak_DelZip($file){
  334. global $bakzippath;
  335. if(strstr($file,".."))
  336. {printerror("FileNotExists","history.go(-1)",9);}
  337. if(empty($file))
  338. {
  339. printerror("FileNotExists","history.go(-1)",9);
  340. }
  341. $filename=$bakzippath."/".$file;
  342. if(!file_exists($filename))
  343. {
  344. printerror("FileNotExists","history.go(-1)",9);
  345. }
  346. DelFiletext($filename);
  347. printerror("DelZipSuccess","history.go(-1)",9);
  348. }
  349. //执行SQL语句
  350. function Ebak_DoExecSql($add){
  351. global $empire,$phome_db_dbname,$phome_db_ver,$phome_db_char;
  352. $query=$add['query'];
  353. if(!$query)
  354. {
  355. printerror("EmptyRunSql","history.go(-1)");
  356. }
  357. //数据库
  358. if($add['mydbname'])
  359. {
  360. $empire->query("use `".$add['mydbname']."`");
  361. }
  362. //编码
  363. if($add['mydbchar'])
  364. {
  365. DoSetDbChar($add['mydbchar']);
  366. }
  367. $query=Ebak_ClearAddsData($query);
  368. Ebak_DoRunQuery($query,$add['mydbchar'],$phome_db_ver);
  369. printerror("RunSqlSuccess","DoSql.php");
  370. }
  371. //上传执行SQL
  372. function Ebak_DoTranExecSql($file,$file_name,$file_type,$file_size,$add){
  373. global $empire,$phome_db_dbname,$phome_db_ver,$phome_db_char;
  374. if(!$file_name||!$file_size)
  375. {
  376. printerror("NotChangeSQLFile","history.go(-1)");
  377. }
  378. $filetype=GetFiletype($file_name);//取得扩展名
  379. if($filetype!=".sql")
  380. {
  381. printerror("NotTranSQLFile","history.go(-1)");
  382. }
  383. //上传文件
  384. $newfile='tmp/uploadsql'.time().'.sql';
  385. $cp=Ebak_DoTranFile($file,$newfile);
  386. if(empty($cp))
  387. {
  388. printerror("TranSQLFileFail","history.go(-1)");
  389. }
  390. $query=ReadFiletext($newfile);
  391. DelFiletext($newfile);
  392. if(!$query)
  393. {
  394. printerror("EmptyRunSql","history.go(-1)");
  395. }
  396. //数据库
  397. if($add['mydbname'])
  398. {
  399. $empire->query("use `".$add['mydbname']."`");
  400. }
  401. //编码
  402. if($add['mydbchar'])
  403. {
  404. DoSetDbChar($add['mydbchar']);
  405. }
  406. Ebak_DoRunQuery($query,$add['mydbchar'],$phome_db_ver);
  407. printerror("RunSqlSuccess","DoSql.php");
  408. }
  409. //替换文件内容
  410. function Ebak_RepPathFiletext($add){
  411. global $bakpath;
  412. $mypath=trim($add['mypath']);
  413. $oldword=Ebak_ClearAddsData($add['oldword']);
  414. $newword=Ebak_ClearAddsData($add['newword']);
  415. $dozz=(int)$add['dozz'];
  416. if(empty($oldword)||empty($mypath))
  417. {
  418. printerror("EmptyRepPathFiletext","history.go(-1)");
  419. }
  420. if(strstr($mypath,".."))
  421. {
  422. printerror("NotChangeRepPathFiletext","history.go(-1)");
  423. }
  424. $path=$bakpath."/".$mypath;
  425. if(!file_exists($path))
  426. {
  427. printerror("PathNotExists","history.go(-1)");
  428. }
  429. $hand=@opendir($path);
  430. while($file=@readdir($hand))
  431. {
  432. $filename=$path."/".$file;
  433. if($file!="."&&$file!=".."&&is_file($filename))
  434. {
  435. $value=ReadFiletext($filename);
  436. if($dozz)
  437. {
  438. $newvalue=Ebak_DoRepFiletextZz($oldword,$newword,$value);
  439. }
  440. else
  441. {
  442. if(!stristr($value,$oldword))
  443. {
  444. continue;
  445. }
  446. $newvalue=str_replace($oldword,$newword,$value);
  447. }
  448. WriteFiletext_n($filename,$newvalue);
  449. }
  450. }
  451. printerror("RepPathFiletextSuccess","RepFiletext.php");
  452. }
  453. ?>