📄 bakup.php
字号:
<?php
!function_exists('adminmsg') && exit('Forbidden');
@set_time_limit(0);
if(!$a_type)$a_type='bakout';
$basename="admin.php?adminjob=bakup&a_type=$a_type";
if($a_type=='bakout'){
if(empty($action)){
$tabledb=array(
'pw_actions',
'pw_smiles',
'pw_adminset',
'pw_announce',
'pw_bbsinfo',
'pw_config',
'pw_hack',
'pw_ipstates',
'pw_schcache',
'pw_sharelinks',
'pw_styles',
'pw_usergroups',
'pw_wordfb',
'pw_credits',
'pw_forums',
'pw_favors',
'pw_banuser',
'pw_membercredit',
'pw_memberinfo',
'pw_polls',
'pw_attachs',
'pw_ks',
'pw_keyword',
'pw_report',
'pw_msg',
'pw_threads',
'pw_tmsgs',
'pw_members',
'pw_memberdata',
'pw_posts',
);
include PrintEot('bakup');exit;
} else{
$bak="#\n# PHPwind bakfile\n# Version:".$wind_version."\n# Time: ".date('Y-m-d H:i')."\n# Type: \n# PHPwind: http://www.phpwind.net\n# --------------------------------------------------------\n\n\n";
$db->query("SET SQL_QUOTE_SHOW_CREATE = 0");
$start = intval($start);
!$tabledb && !$tablesel && adminmsg('operate_error');
!$tabledb && $tabledb=explode("|",$tablesel);
!$step && $sizelimit/=2;
$bakupdata=bakupdata($tabledb,$start);
if(!$step){
!$tabledb && adminmsg('operate_error');
$tablesel=implode("|",$tabledb);
$step=1;
$start=0;
$pre='pw_'.date('md').'_'.num_rand(10).'_';
$bakuptable=bakuptable($tabledb);
}
$f_num=ceil($step/2);
$filename=$pre.$f_num.'.sql';
$step++;
$writedata=$bakuptable ? $bakuptable.$bakupdata : $bakupdata;
$t_name=$tabledb[$tableid-1]; $c_n=$startfrom;
if($stop==1){
$files=$step-1;
trim($writedata) && writeover('data/'.$filename,$bak.$writedata,'ab');
adminmsg('bakup_step',"$basename&action=$action&pre=$pre&start=$startfrom&tableid=$tableid&sizelimit=$sizelimit&step=$step&aaa=$aaa&tablesel=$tablesel&rows=$rows",2);
} else{
trim($writedata) && writeover('data/'.$filename,$bak.$writedata,'ab');
if($step>1){
for($i=1;$i<=$f_num;$i++){
$bakfile.='<a href="data/'.$pre.$i.'.sql">'.$pre.$i.'.sql</a><br>';
}
}
adminmsg('bakup_out');
}
}
} elseif($a_type=='bakin'){
$strlen=19;
$handle=opendir('data');
while(false!== ($file = readdir($handle))){
if(strpos($file,'pw_')!==false && eregi("\.sql$",$file)){
$filearray[]=$file;
if($action=='bakin'){
$filename && $bakinfileinfo=substr($filename,0,$strlen);
if(strpos($file,$bakinfileinfo)!==false){
$bakinfile[]=$file;
}
}
}
}
if(empty($action)){
$filedb=array();
$handle=opendir('data');
if(is_array($filearray)){
foreach($filearray as $file){
$fp=fopen("data/$file",'rb');
$bakinfo=fread($fp,200);
fclose($fp);
$bakdetail=explode("\n",$bakinfo);
$bakfile['name']=$file;
$bakfile['version']=substr($bakdetail[2],10);
$bakfile['time']=substr($bakdetail[3],8);
$bakfile['num']=substr($file,$strlen,strrpos($file,'.')-$strlen);
$filedb[]=$bakfile;
}
}
include PrintEot('bakup');exit;
} elseif($action=='bakin'){
$count=count($bakinfile);
if(!$step)$step=1;
for($i=$step;$i<=$count;$i++){
$sql=readover('data/'.$bakinfileinfo.$i.'.sql');
bakindata($sql);
$step++;
if($count>1 && $step<=$count){
adminmsg('bakup_in',"$basename&action=bakin&step=$step&filename=$filename",2);
}
}
updatecache();
adminmsg('operate_success');
} elseif($action=='del'){
if(!$delfile)adminmsg('operate_error');
foreach($delfile as $value){
unlink("data/$value");
}
adminmsg('operate_success');
}
}
function num_rand($lenth){
mt_srand((double)microtime() * 1000000);
for($i=0;$i<$lenth;$i++){
$randval.= mt_rand(0,9);
}
$randval=substr(md5($randval),mt_rand(0,32-$lenth),$lenth);
return $randval;
}
function bakupdata($tabledb,$start=0){
global $db,$sizelimit,$tableid,$startfrom,$stop,$rows;
$tableid=$tableid?$tableid-1:0;
$stop=0;
$t_count=count($tabledb);
for($i=$tableid;$i<$t_count;$i++){
$ts=$db->get_one("SHOW TABLE STATUS LIKE '$tabledb[$i]'");
$rows=$ts['Rows'];
$limitadd="LIMIT $start,100000";
$query = $db->query("SELECT * FROM $tabledb[$i] $limitadd");
$num_F = mysql_num_fields($query);
while ($datadb = mysql_fetch_row($query)){
$start++;
$bakupdata .= "INSERT INTO $tabledb[$i] VALUES("."'".mysql_escape_string($datadb[0])."'";
$tempdb='';
for($j=1;$j<$num_F;$j++){
$tempdb.=",'".mysql_escape_string($datadb[$j])."'";
}
$bakupdata .=$tempdb. ");\n";
if($sizelimit && strlen($bakupdata)>$sizelimit*1000){
break;
}
}
$db->free_result($query);
if($start>=$rows){
$start=0;
$rows=0;
}
$bakupdata .="\n";
if($sizelimit && strlen($bakupdata)>$sizelimit*1000){
$start==0 && $i++;
$stop=1;
break;
}
$start=0;
}
if($stop==1){
$i++;
$tableid=$i;
$startfrom=$start;
$start=0;
}
return $bakupdata;
}
function bakuptable($tabledb){
global $db;
foreach($tabledb as $table){
$creattable.= "DROP TABLE IF EXISTS $table;\n";
$CreatTable = $db->get_one("SHOW CREATE TABLE $table");
$CreatTable['Create Table']=str_replace($CreatTable['Table'],$table,$CreatTable['Create Table']);
$creattable.=$CreatTable['Create Table'].";\n\n";
}
return $creattable;
}
function bakindata($sql) {
global $db,$installinfo;
$sql=str_replace("\r",'\n',$sql);
$sqlarray=explode(";\n",$sql);
foreach($sqlarray as $query){
$query=trim($query);
if($query[0]=='#'){
$queryy=explode("\n",$query);
$query='';
foreach($queryy as $value){
if($value[0]!='#'){
$query.=$value;
}
}
}
if($query){
$query=trim(str_replace("\n",'',$query));
$db->query($query);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -