1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015 |
- <?php
- $editor=1;
- //字符过滤
- function escape_str($str){
- global $public_r;
- if($public_r['bakescapetype']==2)//real_escape_string
- {
- $str=escape_dbstr($str);
- }
- else//addslashes
- {
- $str=escape_addsstr($str);
- }
- return $str;
- }
- //字符过虑(addslashes)
- function escape_addsstr($str){
- $str=addslashes($str);
- $str=str_replace('\\\'','\'\'',$str);
- $str=str_replace("\\\\","\\\\\\\\",$str);
- $str=str_replace('$','\$',$str);
- return $str;
- }
- //字符过虑(db)
- function escape_dbstr($str){
- global $empire,$dbtbpre,$public_r;
- $str=$empire->EDbEscapeStr($str);
- $str=str_replace('\\\'','\'\'',$str);
- $str=str_replace("\\\\","\\\\\\\\",$str);
- $str=str_replace('$','\$',$str);
- return $str;
- }
- //修复表
- function Ebak_Rep($tablename,$dbname,$userid,$username){
- global $empire,$ecms_config;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $dbname=RepPostVar($dbname);
- $empire->usequery("use `$dbname`");
- $count=count($tablename);
- if(empty($count))
- {printerror("MustChangeOneTable","history.go(-1)");}
- for($i=0;$i<$count;$i++)
- {
- //$sql1=$empire->query("OPTIMIZE TABLE `$tablename[$i]`;");
- //$sql2=$empire->query("CHECK TABLE `$tablename[$i]`;");
- //$sql3=$empire->query("ANALYZE TABLE `$tablename[$i]`;");
- $sql4=$empire->query("REPAIR TABLE `$tablename[$i]`;");
- }
- $empire->usequery("use `".$ecms_config['db']['dbname']."`");
- //操作日志
- insert_dolog("dbname=".$dbname);
- printerror("RepireTableSuccess","ChangeTable.php?mydbname=$dbname".hReturnEcmsHashStrHref2(0));
- }
- //优化表
- function Ebak_Opi($tablename,$dbname,$userid,$username){
- global $empire,$ecms_config;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $dbname=RepPostVar($dbname);
- $empire->usequery("use `$dbname`");
- $count=count($tablename);
- if(empty($count))
- {printerror("MustChangeOneTable","history.go(-1)");}
- for($i=0;$i<$count;$i++)
- {
- $sql1=$empire->query("OPTIMIZE TABLE `$tablename[$i]`;");
- }
- $empire->usequery("use `".$ecms_config['db']['dbname']."`");
- //操作日志
- insert_dolog("dbname=".$dbname);
- printerror("OptimTableSuccess","ChangeTable.php?mydbname=$dbname".hReturnEcmsHashStrHref2(0));
- }
- //删除数据表
- function Ebak_Drop($tablename,$dbname,$userid,$username){
- global $empire,$ecms_config;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $dbname=RepPostVar($dbname);
- $empire->usequery("use `$dbname`");
- $count=count($tablename);
- if(empty($count))
- {printerror("MustChangeOneDelTable","history.go(-1)");}
- $a="";
- $first=1;
- for($i=0;$i<$count;$i++)
- {
- if(empty($first))
- {
- $a.=",";
- }
- else
- {
- $first=0;
- }
- $a.="`".$tablename[$i]."`";
- }
- $sql1=$empire->query("DROP TABLE IF EXISTS ".$a.";");
- $empire->usequery("use `".$ecms_config['db']['dbname']."`");
- //操作日志
- insert_dolog("dbname=".$dbname);
- printerror("DelTableSuccess","ChangeTable.php?mydbname=$dbname".hReturnEcmsHashStrHref2(0));
- }
- //删除数据库
- function Ebak_DropDb($dbname,$userid,$username){
- global $empire;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $dbname=RepPostVar($dbname);
- if(empty($dbname))
- {printerror("ChangeDropDb","history.go(-1)");}
- $sql=$empire->query("DROP DATABASE `$dbname`");
- if($sql)
- {
- //操作日志
- insert_dolog("dbname=".$dbname);
- printerror("DropDbSuccess","ChangeDb.php".hReturnEcmsHashStrHref2(1));
- }
- else
- {printerror("DbError","history.go(-1)");}
- }
- //建立数据库
- function Ebak_CreatDb($dbname,$dbchar,$userid,$username){
- global $empire,$ecms_config;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $dbname=RepPostVar($dbname);
- if(!trim($dbname)){
- printerror("EmptyDbname","history.go(-1)");
- }
- $a="";
- if($dbchar&&$ecms_config['db']['dbver']>='4.1'){
- $a=" DEFAULT CHARACTER SET ".$dbchar;
- }
- $sql=$empire->query("CREATE DATABASE IF NOT EXISTS `$dbname`".$a);
- if($sql){
- //操作日志
- insert_dolog("dbname=".$dbname);
- printerror("AddDbSuccess","ChangeDb.php".hReturnEcmsHashStrHref2(1));
- }
- else
- {printerror("DbError","history.go(-1)");}
- }
- //清空表
- function Ebak_EmptyTable($tablename,$dbname,$userid,$username){
- global $empire,$ecms_config;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $dbname=RepPostVar($dbname);
- $empire->usequery("use `$dbname`");
- $count=count($tablename);
- if(empty($count))
- {printerror("MustChangeOneTable","history.go(-1)");}
- for($i=0;$i<$count;$i++)
- {
- $sql1=$empire->query("TRUNCATE `".$tablename[$i]."`;");
- }
- $empire->usequery("use `".$ecms_config['db']['dbname']."`");
- //操作日志
- insert_dolog("dbname=".$dbname);
- printerror("EmptyTableSuccess","ChangeTable.php?mydbname=$dbname".hReturnEcmsHashStrHref2(0));
- }
- //---------------------------备份
- //初使化备份
- function Ebak_DoEbak($add,$userid,$username){
- global $empire,$public_r,$fun_r,$ecms_config;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $dbname=RepPostVar($add['mydbname']);
- if(empty($dbname)){
- printerror("NotChangeDbname","history.go(-1)");
- }
- $tablename=$add['tablename'];
- $count=count($tablename);
- if(empty($count)){
- printerror("MustChangeOneTable","history.go(-1)");
- }
- $add['baktype']=(int)$add['baktype'];
- $add['filesize']=(int)$add['filesize'];
- $add['bakline']=(int)$add['bakline'];
- $add['autoauf']=(int)$add['autoauf'];
- if((!$add['filesize']&&!$add['baktype'])||(!$add['bakline']&&$add['baktype'])){
- printerror("FileSizeEmpty","history.go(-1)");
- }
- //目录名
- $add['mypath']=RepPostStr($add['mypath'],1);
- $bakpath=$public_r['bakdbpath'];
- if(empty($add['mypath'])){
- $add['mypath']=$dbname."_".date("YmdHis");
- }
- DoMkdir($bakpath."/".$add['mypath']);
- //生成说明文件
- $readme=$add['readme'];
- $rfile=$bakpath."/".$add['mypath']."/readme.txt";
- $readme.="\r\n\r\nBaktime: ".date("Y-m-d H:i:s");
- WriteFiletext_n($rfile,$readme);
- $b_table="";
- $d_table="";
- for($i=0;$i<$count;$i++){
- $tablename[$i]=RepPostVar($tablename[$i]);
- $b_table.=$tablename[$i].",";
- $d_table.="\$tb[".$tablename[$i]."]=0;\r\n";
- }
- //去掉最后一个,
- $b_table=substr($b_table,0,strlen($b_table)-1);
- $bakstru=(int)$add['bakstru'];
- $bakstrufour=(int)$add['bakstrufour'];
- $beover=(int)$add['beover'];
- $waitbaktime=(int)$add['waitbaktime'];
- $bakdatatype=(int)$add['bakdatatype'];
- if($add['insertf']=='insert'){
- $insertf='insert';
- }
- else{
- $insertf='replace';
- }
- if($ecms_config['db']['dbver']=='4.0'&&$add['dbchar']=='auto')
- {
- $add['dbchar']='';
- }
- $string="<?php
- \$b_table=\"".$b_table."\";
- ".$d_table."
- \$b_baktype=".$add['baktype'].";
- \$b_filesize=".$add['filesize'].";
- \$b_bakline=".$add['bakline'].";
- \$b_autoauf=".$add['autoauf'].";
- \$b_dbname=\"".$dbname."\";
- \$b_stru=".$bakstru.";
- \$b_strufour=".$bakstrufour.";
- \$b_dbchar=\"".addslashes($add['dbchar'])."\";
- \$b_beover=".$beover.";
- \$b_insertf=\"".addslashes($insertf)."\";
- \$b_autofield=\",".addslashes($add['autofield']).",\";
- \$b_bakdatatype=".$bakdatatype.";
- ?>";
- $cfile=$bakpath."/".$add['mypath']."/config.php";
- WriteFiletext_n($cfile,$string);
- if($add['baktype']){
- $phome='BakExeT';
- }
- else{
- $phome='BakExe';
- }
- echo $fun_r['FirstBakSuccess']."<script>self.location.href='phome.php?phome=$phome&t=0&s=0&p=0&mypath=$add[mypath]&waitbaktime=$waitbaktime".hReturnEcmsHashStrHref(0)."';</script>";
- exit();
- }
- //执行备份(按文件大小)
- function Ebak_BakExe($t,$s,$p,$mypath,$alltotal,$thenof,$fnum,$stime=0,$userid,$username){
- global $empire,$public_r,$fun_r;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- if(empty($mypath)){
- printerror("ErrorUrl","history.go(-1)");
- }
- $bakpath=$public_r['bakdbpath'];
- $path=$bakpath."/".$mypath;
- @include($path."/config.php");
- if(empty($b_table)){
- printerror("ErrorUrl","history.go(-1)");
- }
- $waitbaktime=(int)$_GET['waitbaktime'];
- if(empty($stime))
- {
- $stime=time();
- }
- $header="<?php
- @include(\"../../inc/header.php\");
- ";
- $footer="
- @include(\"../../inc/footer.php\");
- ?>";
- $btb=explode(",",$b_table);
- $count=count($btb);
- $t=(int)$t;
- $s=(int)$s;
- $p=(int)$p;
- //备份完毕
- if($t>=$count)
- {
- insert_dolog("dbname=".$b_dbname);//操作日志
- $varmessage=$fun_r['BakSuccess']."<br><br>".$fun_r['TotalUseTime'].ToChangeUseTime($stime);
- $GLOBALS['varmessage']=$varmessage;
- printerror('VarMessage','ChangeDb.php'.hReturnEcmsHashStrHref2(1),0,1);
- }
- $dumpsql=Ebak_ReturnVer();
- //选择数据库
- $u=$empire->usequery("use `$b_dbname`");
- //编码
- if($b_dbchar=='auto')
- {
- if(empty($s))
- {
- $status_r=Ebak_GetTotal($b_dbname,$btb[$t]);
- $collation=Ebak_GetSetChar($status_r['Collation']);
- DoSetDbChar($collation);
- //总记录数
- $num=$public_r[limittype]?-1:$status_r['Rows'];
- }
- else
- {
- $collation=$_GET['collation'];
- DoSetDbChar($collation);
- $num=(int)$alltotal;
- }
- $dumpsql.=Ebak_ReturnSetNames($collation);
- }
- else
- {
- DoSetDbChar($b_dbchar);
- if(empty($s))
- {
- //总记录数
- if($public_r[limittype])
- {
- $num=-1;
- }
- else
- {
- $status_r=Ebak_GetTotal($b_dbname,$btb[$t]);
- $num=$status_r['Rows'];
- }
- }
- else
- {
- $num=(int)$alltotal;
- }
- }
- //备份数据库结构
- if($b_stru&&empty($s))
- {
- $dumpsql.=Ebak_Returnstru($btb[$t],$b_strufour);
- }
- $sql=$empire->query("select * from `".$btb[$t]."` limit $s,$num");
- //取得字段数
- if(empty($fnum))
- {
- $return_fr=Ebak_ReturnTbfield($b_dbname,$btb[$t],$b_autofield);
- $fieldnum=$return_fr['num'];
- $noautof=$return_fr['autof'];
- }
- else
- {
- $fieldnum=$fnum;
- $noautof=$thenof;
- }
- //完整插入
- $inf='';
- if($b_beover==1)
- {
- $inf='('.Ebak_ReturnInTbfield($b_dbname,$btb[$t]).')';
- }
- //十六进制
- $hexf='';
- if($b_bakdatatype==1)
- {
- $hexf=Ebak_ReturnInStrTbfield($b_dbname,$btb[$t]);
- }
- $b=0;
- while($r=$empire->fetch($sql))
- {
- $b=1;
- $s++;
- $dumpsql.="E_D(\"".$b_insertf." into `".$btb[$t]."`".$inf." values(";
- $first=1;
- for($i=0;$i<$fieldnum;$i++)
- {
- //首字段
- if(empty($first))
- {
- $dumpsql.=',';
- }
- else
- {
- $first=0;
- }
- $myi=$i+1;
- if(!isset($r[$i])||strstr($noautof,','.$myi.','))
- {
- $dumpsql.='NULL';
- }
- else
- {
- $dumpsql.=Ebak_ReSqlFtext($r[$i],$b_bakdatatype,$myi,$hexf);
- }
- }
- $dumpsql.=");\");\r\n";
- //是否超过限制
- if(strlen($dumpsql)>=$b_filesize*1024)
- {
- $p++;
- $sfile=$path."/".$btb[$t]."_".$p.".php";
- $dumpsql=$header.$dumpsql.$footer;
- WriteFiletext_n($sfile,$dumpsql);
- $empire->free($sql);
- //echo $fun_r['BakOneDataSuccess'].Ebak_EchoBakSt($btb[$t],$count,$t,$num,$s)."<script>self.location.href='phome.php?phome=BakExe&s=$s&p=$p&t=$t&mypath=$mypath&alltotal=$num&thenof=$noautof&fieldnum=$fieldnum&stime=$stime".hReturnEcmsHashStrHref(0)."';</script>";
- echo"<meta http-equiv=\"refresh\" content=\"".$waitbaktime.";url=phome.php?phome=BakExe&s=$s&p=$p&t=$t&mypath=$mypath&alltotal=$num&thenof=$noautof&fieldnum=$fieldnum&stime=$stime&waitbaktime=$waitbaktime&collation=$collation".hReturnEcmsHashStrHref(0)."\">".$fun_r['BakOneDataSuccess'].Ebak_EchoBakSt($btb[$t],$count,$t,$num,$s);
- exit();
- }
- }
- //最后一个备份
- if(empty($p)||$b==1)
- {
- $p++;
- $sfile=$path."/".$btb[$t]."_".$p.".php";
- $dumpsql=$header.$dumpsql.$footer;
- WriteFiletext_n($sfile,$dumpsql);
- }
- Ebak_RepFilenum($p,$btb[$t],$path);
- $t++;
- $empire->free($sql);
- //进入下一个表
- //echo $btb[$t-1].$fun_r['OneTableBakSuccess']."<script>self.location.href='phome.php?phome=BakExe&s=0&p=0&t=$t&mypath=$mypath&stime=$stime".hReturnEcmsHashStrHref(0)."';</script>";
- echo"<meta http-equiv=\"refresh\" content=\"".$waitbaktime.";url=phome.php?phome=BakExe&s=0&p=0&t=$t&mypath=$mypath&stime=$stime&waitbaktime=$waitbaktime".hReturnEcmsHashStrHref(0)."\">".$btb[$t-1].$fun_r['OneTableBakSuccess'];
- exit();
- }
- //执行备份(按记录)
- function Ebak_BakExeT($t,$s,$p,$mypath,$alltotal,$thenof,$fnum,$auf='',$aufval=0,$stime=0,$userid,$username){
- global $empire,$public_r,$fun_r;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- if(empty($mypath)){
- printerror("ErrorUrl","history.go(-1)");
- }
- $bakpath=$public_r['bakdbpath'];
- $path=$bakpath."/".$mypath;
- @include($path."/config.php");
- if(empty($b_table)){
- printerror("ErrorUrl","history.go(-1)");
- }
- $waitbaktime=(int)$_GET['waitbaktime'];
- if(empty($stime))
- {
- $stime=time();
- }
- $header="<?php
- @include(\"../../inc/header.php\");
- ";
- $footer="
- @include(\"../../inc/footer.php\");
- ?>";
- $btb=explode(",",$b_table);
- $count=count($btb);
- $t=(int)$t;
- $s=(int)$s;
- $p=(int)$p;
- //备份完毕
- if($t>=$count)
- {
- insert_dolog("dbname=".$b_dbname);//操作日志
- $varmessage=$fun_r['BakSuccess']."<br><br>".$fun_r['TotalUseTime'].ToChangeUseTime($stime);
- $GLOBALS['varmessage']=$varmessage;
- printerror('VarMessage','ChangeDb.php'.hReturnEcmsHashStrHref2(1),0,1);
- }
- $dumpsql=Ebak_ReturnVer();
- //选择数据库
- $u=$empire->usequery("use `$b_dbname`");
- //编码
- if($b_dbchar=='auto')
- {
- if(empty($s))
- {
- $status_r=Ebak_GetTotal($b_dbname,$btb[$t]);
- $collation=Ebak_GetSetChar($status_r['Collation']);
- DoSetDbChar($collation);
- //总记录数
- $num=$public_r[limittype]?-1:$status_r['Rows'];
- }
- else
- {
- $collation=$_GET['collation'];
- DoSetDbChar($collation);
- $num=(int)$alltotal;
- }
- $dumpsql.=Ebak_ReturnSetNames($collation);
- }
- else
- {
- DoSetDbChar($b_dbchar);
- if(empty($s))
- {
- //总记录数
- if($public_r[limittype])
- {
- $num=-1;
- }
- else
- {
- $status_r=Ebak_GetTotal($b_dbname,$btb[$t]);
- $num=$status_r['Rows'];
- }
- }
- else
- {
- $num=(int)$alltotal;
- }
- }
- //备份数据库结构
- if($b_stru&&empty($s))
- {
- $dumpsql.=Ebak_Returnstru($btb[$t],$b_strufour);
- }
- //取得字段数
- if(empty($fnum))
- {
- $return_fr=Ebak_ReturnTbfield($b_dbname,$btb[$t],$b_autofield);
- $fieldnum=$return_fr['num'];
- $noautof=$return_fr['autof'];
- $auf=$return_fr['auf'];
- }
- else
- {
- $fieldnum=$fnum;
- $noautof=$thenof;
- }
- //自动识别自增项
- $aufval=(int)$aufval;
- if($b_autoauf==1&&$auf)
- {
- $sql=$empire->query("select * from `".$btb[$t]."` where ".$auf.">".$aufval." order by ".$auf." limit $b_bakline");
- }
- else
- {
- $sql=$empire->query("select * from `".$btb[$t]."` limit $s,$b_bakline");
- }
- //完整插入
- $inf='';
- if($b_beover==1)
- {
- $inf='('.Ebak_ReturnInTbfield($b_dbname,$btb[$t]).')';
- }
- //十六进制
- $hexf='';
- if($b_bakdatatype==1)
- {
- $hexf=Ebak_ReturnInStrTbfield($b_dbname,$btb[$t]);
- }
- $b=0;
- while($r=$empire->fetch($sql))
- {
- if($auf)
- {
- $lastaufval=$r[$auf];
- }
- $b=1;
- $s++;
- $dumpsql.="E_D(\"".$b_insertf." into `".$btb[$t]."`".$inf." values(";
- $first=1;
- for($i=0;$i<$fieldnum;$i++)
- {
- //首字段
- if(empty($first))
- {
- $dumpsql.=',';
- }
- else
- {
- $first=0;
- }
- $myi=$i+1;
- if(!isset($r[$i])||strstr($noautof,','.$myi.','))
- {
- $dumpsql.='NULL';
- }
- else
- {
- $dumpsql.=Ebak_ReSqlFtext($r[$i],$b_bakdatatype,$myi,$hexf);
- }
- }
- $dumpsql.=");\");\r\n";
- }
- if(empty($b))
- {
- //最后一个备份
- if(empty($p))
- {
- $p++;
- $sfile=$path."/".$btb[$t]."_".$p.".php";
- $dumpsql=$header.$dumpsql.$footer;
- WriteFiletext_n($sfile,$dumpsql);
- }
- Ebak_RepFilenum($p,$btb[$t],$path);
- $t++;
- $empire->free($sql);
- //进入下一个表
- //echo $btb[$t-1].$fun_r['OneTableBakSuccess']."<script>self.location.href='phome.php?phome=BakExeT&s=0&p=0&t=$t&mypath=$mypath&stime=$stime".hReturnEcmsHashStrHref(0)."';</script>";
- echo"<meta http-equiv=\"refresh\" content=\"".$waitbaktime.";url=phome.php?phome=BakExeT&s=0&p=0&t=$t&mypath=$mypath&stime=$stime&waitbaktime=$waitbaktime".hReturnEcmsHashStrHref(0)."\">".$btb[$t-1].$fun_r['OneTableBakSuccess'];
- exit();
- }
- //进入下一组
- $p++;
- $sfile=$path."/".$btb[$t]."_".$p.".php";
- $dumpsql=$header.$dumpsql.$footer;
- WriteFiletext_n($sfile,$dumpsql);
- $empire->free($sql);
- //echo $fun_r['BakOneDataSuccess'].Ebak_EchoBakSt($btb[$t],$count,$t,$num,$s)."<script>self.location.href='phome.php?phome=BakExeT&s=$s&p=$p&t=$t&mypath=$mypath&alltotal=$num&thenof=$noautof&fieldnum=$fieldnum&auf=$auf&aufval=$lastaufval&stime=$stime".hReturnEcmsHashStrHref(0)."';</script>";
- echo"<meta http-equiv=\"refresh\" content=\"".$waitbaktime.";url=phome.php?phome=BakExeT&s=$s&p=$p&t=$t&mypath=$mypath&alltotal=$num&thenof=$noautof&fieldnum=$fieldnum&auf=$auf&aufval=$lastaufval&stime=$stime&waitbaktime=$waitbaktime&collation=$collation".hReturnEcmsHashStrHref(0)."\">".$fun_r['BakOneDataSuccess'].Ebak_EchoBakSt($btb[$t],$count,$t,$num,$s);
- exit();
- }
- //输出备份进度条
- function Ebak_EchoBakSt($tbname,$tbnum,$tb,$rnum,$r){
- $table=($tb+1).'/'.$tbnum;
- $record=$r;
- if($rnum!=-1)
- {
- $record=$r.'/'.$rnum;
- }
- ?>
- <br><br>
- <table width="90%" border="0" align="center" cellpadding="3" cellspacing="1">
- <tr><td height="25">Table Name : <b><?=$tbname?></b></td></tr>
- <tr><td height="25">Table : <b><?=$table?></b></td></tr>
- <tr><td height="25">Record : <b><?=$record?></b></td></tr>
- </table><br><br>
- <?
- }
- //输出恢复进度条
- function Ebak_EchoReDataSt($tbname,$tbnum,$tb,$pnum,$p){
- $table=($tb+1).'/'.$tbnum;
- $record=$p.'/'.$pnum;
- ?>
- <br><br>
- <table width="90%" border="0" align="center" cellpadding="3" cellspacing="1">
- <tr><td height="25">Table Name : <b><?=$tbname?></b></td></tr>
- <tr><td height="25">Table : <b><?=$table?></b></td></tr>
- <tr><td height="25">File : <b><?=$record?></b></td></tr>
- </table><br><br>
- <?
- }
- //取得表记录数
- function Ebak_GetTotal($dbname,$tbname){
- global $empire;
- /*
- $tr=$empire->fetch1("select count(*) AS total from ".$btb[$t]);
- $num=$tr[total];
- */
- $tr=$empire->fetch1("SHOW TABLE STATUS LIKE '".$tbname."';");
- return $tr;
- }
- //返回字符集set
- function Ebak_GetSetChar($char){
- global $empire;
- if(empty($char))
- {
- return '';
- }
- $r=$empire->fetch1("SHOW COLLATION LIKE '".$char."';");
- return $r['Charset'];
- }
- //返回表字段信息
- function Ebak_ReturnTbfield($dbname,$tbname,$autofield){
- global $empire;
- $sql=$empire->query("SHOW FIELDS FROM `".$tbname."`");
- $i=0;//字段数
- $autof=",";//去除自增字段列表
- $f='';//自增字段名
- while($r=$empire->fetch($sql))
- {
- $i++;
- if(strstr($autofield,",".$tbname.".".$r[Field].","))
- {
- $autof.=$i.",";
- }
- if($r['Extra']=='auto_increment')
- {
- $f=$r['Field'];
- }
- }
- $return_r['num']=$i;
- $return_r['autof']=$autof;
- $return_r['auf']=$f;
- return $return_r;
- }
- //返回插入字段
- function Ebak_ReturnInTbfield($dbname,$tbname){
- global $empire;
- $sql=$empire->query("SHOW FIELDS FROM `".$tbname."`");
- $f='';
- $dh='';
- while($r=$empire->fetch($sql))
- {
- $f.=$dh.'`'.$r['Field'].'`';
- $dh=',';
- }
- return $f;
- }
- //返回字符字段
- function Ebak_ReturnInStrTbfield($dbname,$tbname){
- global $empire;
- $sql=$empire->query("SHOW FIELDS FROM `".$tbname."`");
- $i=0;
- $f='';
- $dh='';
- while($r=$empire->fetch($sql))
- {
- $i++;
- if(!(stristr($r[Type],'char')||stristr($r[Type],'text')))
- {
- continue;
- }
- $f.=$dh.$i;
- $dh=',';
- }
- if($f)
- {
- $f=','.$f.',';
- }
- return $f;
- }
- //返回字段内容
- function Ebak_ReSqlFtext($str,$bakdatatype,$i,$tbstrf){
- if($bakdatatype==1&&!empty($str)&&strstr($tbstrf,','.$i.','))
- {
- $restr='0x'.bin2hex($str);
- }
- else
- {
- $restr='\''.escape_str($str).'\'';
- }
- return $restr;
- }
- //替换文件数
- function Ebak_RepFilenum($p,$table,$path){
- if(empty($p))
- {$p=0;}
- $file=$path."/config.php";
- $text=ReadFiletext($file);
- $rep1="\$tb[".$table."]=0;";
- $rep2="\$tb[".$table."]=".$p.";";
- $text=str_replace($rep1,$rep2,$text);
- WriteFiletext_n($file,$text);
- }
- //执行SQL
- function E_D($sql){
- global $empire;
- $empire->query($sql);
- }
- //建立表
- function E_C($sql){
- global $empire;
- $empire->query(Ebak_AddDbchar($sql));
- }
- //转为Mysql4.0格式
- function Ebak_ToMysqlFour($query){
- $exp="ENGINE=";
- if(!strstr($query,$exp))
- {
- return $query;
- }
- $exp1=" ";
- $r=explode($exp,$query);
- //取得表类型
- $r1=explode($exp1,$r[1]);
- $returnquery=$r[0]."TYPE=".$r1[0];
- return $returnquery;
- }
- //---------------------返回数据库结构
- function Ebak_Returnstru($table,$strufour){
- global $empire;
- $dumpsql.="E_D(\"DROP TABLE IF EXISTS `".$table."`;\");\r\n";
- //设置引号
- $usql=$empire->query("SET SQL_QUOTE_SHOW_CREATE=1;");
- //数据表结构
- $r=$empire->fetch1("SHOW CREATE TABLE `$table`;");
- $create=str_replace("\"","\\\"",$r[1]);
- //转为4.0格式
- if($strufour)
- {
- $create=Ebak_ToMysqlFour($create);
- }
- $dumpsql.="E_C(\"".$create."\");\r\n";
- return $dumpsql;
- }
- //返回设置编码
- function Ebak_ReturnSetNames($char){
- if(empty($char))
- {
- return '';
- }
- $dumpsql="DoSetDbChar('".$char."');\r\n";
- return $dumpsql;
- }
- //去除字段中的编码
- function Ebak_ReplaceFieldChar($sql){
- global $ecms_config;
- if($ecms_config['db']['dbver']=='4.0'&&strstr($sql,' character set '))
- {
- $preg_str="/ character set (.+?) collate (.+?) /is";
- $sql=preg_replace($preg_str,' ',$sql);
- }
- return $sql;
- }
- //加编码
- function Ebak_AddDbchar($sql){
- global $ecms_config,$b_dbchar;
- //加编码
- if($ecms_config['db']['dbver']>='4.1'&&!strstr($sql,'ENGINE=')&&($ecms_config['db']['setchar']||$b_dbchar)&&$b_dbchar!='auto')
- {
- $dbcharset=$b_dbchar?$b_dbchar:$ecms_config['db']['setchar'];
- $sql=Ebak_DoCreateTable($sql,$ecms_config['db']['dbver'],$dbcharset);
- }
- elseif($ecms_config['db']['dbver']=='4.0'&&strstr($sql,'ENGINE='))
- {
- $sql=Ebak_ToMysqlFour($sql);
- }
- //去除字段中的编码
- $sql=Ebak_ReplaceFieldChar($sql);
- return $sql;
- }
- //建表
- function Ebak_DoCreateTable($sql,$mysqlver,$dbcharset){
- $type=strtoupper(preg_replace("/^\s*CREATE TABLE\s+.+\s+\(.+?\).*(ENGINE|TYPE)\s*=\s*([a-z]+?).*$/isU","\\2",$sql));
- $type=in_array($type,array('MYISAM','HEAP'))?$type:'MYISAM';
- return preg_replace("/^\s*(CREATE TABLE\s+.+\s+\(.+?\)).*$/isU","\\1",$sql).
- ($mysqlver>='4.1'?" ENGINE=$type DEFAULT CHARSET=$dbcharset":" TYPE=$type");
- }
- //返回版权信息
- function Ebak_ReturnVer()
- {
- $string="
- /*
- SoftName : EmpireBak
- Author : wm_chief
- Copyright: Powered by www.phome.net
- */
- ";
- return $string;
- }
- //转换大小
- function Ebak_ChangeSize($size){
- if($size<1024)
- {
- $str=$size." B";
- }
- elseif($size<1024*1024)
- {
- $str=round($size/1024,2)." KB";
- }
- elseif($size<1024*1024*1024)
- {
- $str=round($size/(1024*1024),2)." MB";
- }
- else
- {
- $str=round($size/(1024*1024*1024),2)." GB";
- }
- return $str;
- }
- //导入数据
- function Ebak_ReData($add,$mypath,$userid,$username){
- global $empire,$public_r;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $mypath=RepPostStr($mypath,1);
- $add[mydbname]=RepPostStr($add[mydbname],1);
- if(empty($mypath)||empty($add[mydbname]))
- {printerror("EmptyDbnamePath","history.go(-1)");}
- $bakpath=$public_r['bakdbpath'];
- $path=$bakpath."/".$mypath;
- if(!file_exists($path))
- {
- printerror("DbPathNotExist","history.go(-1)");
- }
- @include($path."/config.php");
- if(empty($b_table))
- {
- printerror("BakCsError","history.go(-1)");
- }
- $waitbaktime=(int)$add['waitbaktime'];
- $btb=explode(",",$b_table);
- $nfile=$path."/".$btb[0]."_1.php?t=0&p=0&mydbname=$add[mydbname]&mypath=$mypath&waitbaktime=$waitbaktime".hReturnEcmsHashStrHref(0);
- Header("Location:$nfile");
- exit();
- }
- //删除备份目录
- function Ebak_DelBakpath($path,$userid,$username){
- global $public_r;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $path=RepPostStr($path,1);
- if(strstr($path,".."))
- {printerror("NotChangeDelPath","history.go(-1)");}
- if(!trim($path))
- {printerror("NotChangeDelPath","history.go(-1)");}
- $bakpath=$public_r['bakdbpath'];
- $delpath=$bakpath."/".$path;
- if(!file_exists($delpath))
- {
- printerror("ThisPathNotExist","history.go(-1)");
- }
- @include_once("../../class/delpath.php");
- $delpath=DelPath($delpath);
- //操作日志
- insert_dolog("path=".$path);
- printerror("DelPathSuccess","ChangePath.php?change=".RepPostStr($_GET['change'],1).hReturnEcmsHashStrHref2(0));
- }
- //打包目录
- function ZipFile($path,$zipname){
- global $public_r;
- $bakpath=$public_r['bakdbpath'];
- $bakzippath=$public_r['bakdbzip'];
- @include("../../class/phpzip.inc.php");
- $z=new PHPZip(); //新建立一个zip的类
- $z->Zip($bakpath."/".$path,$bakzippath."/".$zipname); //添加指定目录
- }
- //删除压缩包
- function Ebak_DelZip($file,$userid,$username){
- global $public_r;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $file=RepPostStr($file,1);
- if(strstr($file,".."))
- {printerror("FileNotExist","history.go(-1)",8);}
- if(empty($file))
- {
- printerror("FileNotExist","history.go(-1)",8);
- }
- $bakzippath=$public_r['bakdbzip'];
- $filename=$bakzippath."/".$file;
- if(!file_exists($filename))
- {
- printerror("FileNotExist","history.go(-1)",8);
- }
- DelFiletext($filename);
- //操作日志
- insert_dolog("file=".$file);
- printerror("DelZipFileSuccess","history.go(-1)",8);
- }
- //压缩目录
- function Ebak_Dozip($path,$userid,$username){
- global $public_r;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $path=RepPostStr($path,1);
- if(strstr($path,".."))
- {printerror("ThisPathNotExist","history.go(-1)",8);}
- if(empty($path))
- {
- printerror("ThisPathNotExist","history.go(-1)",8);
- }
- $bakpath=$public_r['bakdbpath'];
- $bakzippath=$public_r['bakdbzip'];
- $mypath=$bakpath."/".$path;
- if(!file_exists($mypath))
- {
- printerror("ThisPathNotExist","history.go(-1)",8);
- }
- $zipname=$path.make_password(10).".zip";
- ZipFile($path,$zipname);
- echo"<script>self.location.href='DownZip.php?f=$zipname&p=$path".hReturnEcmsHashStrHref2(0)."';</script>";
- }
- //转向恢复页面
- function Ebak_PathGotoRedata($path,$userid,$username){
- global $public_r;
- //验证权限
- CheckLevel($userid,$username,$classid,"dbdata");
- $path=RepPostStr($path,1);
- if(strstr($path,".."))
- {printerror("NotChangeDelPath","history.go(-1)");}
- if(!trim($path))
- {printerror("NotChangeDelPath","history.go(-1)");}
- $bakpath=$public_r['bakdbpath'];
- $repath=$bakpath."/".$path;
- if(!file_exists($repath))
- {
- printerror("ThisPathNotExist","history.go(-1)");
- }
- @include $repath.'/config.php';
- Header("Location:ReData.php?mydbname=$b_dbname&mypath=$path".hReturnEcmsHashStrHref2(0));
- exit();
- }
- ?>
|