📄 bak.php
字号:
<?php
!$_SERVER['PHP_SELF'] && $_SERVER['PHP_SELF']=$_SERVER['SCRIPT_NAME'];
substr($_SERVER['PHP_SELF'],-9,-4)!=='admin' && exit('Forbidden');
@set_time_limit(0);
if(!empty($_GET['type'])) {
if($_GET['type']=='out') {
if(empty($_GET['do'])) {
$tabledb=array(
'duoxun_settings','duoxun_members','duoxun_links',
'duoxun_templates','duoxun_sort','duoxun_upload',
'duoxun_wordfb','duoxun_subject','duoxun_content',
'duoxun_comment','duoxun_news','duoxun_toppic',
'duoxun_bbs',
);
} elseif($_GET['do']=='bakout') {
$bak="#\n# DuoXun bakfile\n# Version:".$duoxun_version."\n# Time: ".date('Y-m-d H:i')."\n# 多讯网: http://www.duoxun.com\n# --------------------------------------------------------\n\n\n";
query("SET SQL_QUOTE_SHOW_CREATE = 0");
$tabledb=$_POST['tabledb'];
if(!empty($_POST['sizelimit'])) {
$sizelimit=$_POST['sizelimit'];
} elseif(!empty($_GET['sizelimit'])) {
$sizelimit=$_GET['sizelimit'];
}
!empty($_GET['start']) && $start=intval($_GET['start']);
!empty($_GET['tableid']) && $tableid=$_GET['tableid'];
!empty($_GET['step']) && $step=$_GET['step'];
!empty($_GET['pre']) && $pre=$_GET['pre'];
!empty($_GET['tablesel']) && $tablesel=$_GET['tablesel'];
!empty($_GET['rows']) && $rows=$_GET['rows'];
if(!$tabledb && !$tablesel) {
echo "<script language=\"javascript\">alert(\"没有选择操作对象!\")</script>";
echo "<meta http-equiv='refresh' content='0;url=admin.php?job=bak&type=out'>";
exit;
}
!$tabledb && $tabledb=explode("|",$tablesel);
!$step && $sizelimit/=2;
$bakupdata=bakupdata($tabledb,$start=0);
if(!$step){
if(!$tabledb && !$tablesel) {
echo "<script language=\"javascript\">alert(\"没有选择操作对象!\")</script>";
echo "<meta http-equiv='refresh' content='0;url=admin.php?job=bak&type=out'>";
exit;
}
$tablesel=implode("|",$tabledb);
$step=1;
$start=0;
$pre='duoxun_'.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(R_P.'include/'.$filename,$bak.$writedata,'ab');
echo "<meta http-equiv='refresh' content='0;url=admin.php?job=bak&type=out&do=bakout&start=$startfrom&tableid=$tableid&sizelimit=$sizelimit&step=$step&pre=$pre&tablesel=$tablesel&rows=$rows'>";
exit;
} else{
trim($writedata) && writeover(R_P.'include/'.$filename,$bak.$writedata,'ab');
if($step>1){
for($i=1;$i<=$f_num;$i++){
$bakfile.='<a href="include/'.$pre.$i.'.sql">'.$pre.$i.'.sql</a><br>';
}
}
echo "<script language=\"javascript\">alert(\"已全部备份,备份文件保存在include目录下,备份文件为$filename!\")</script>";
echo "<meta http-equiv='refresh' content='0;url=admin.php?job=bak&type=in'>";
exit;
}
}
} elseif($_GET['type']=='in') {
if(empty($_GET['do'])) {
$filedb=array();
$handle=opendir('include');
while($file=readdir($handle)) {
if((!$DUOXUN || eregi("^duoxun_",$file) || eregi("^$DUOXUN",$file)) && eregi("\.sql$",$file)) {
$strlen=eregi("^$DUOXUN",$file) ? 16 + strlen($DUOXUN) : 19;
$fp=fopen(R_P."include/$file",'rb');
$bakinfo=fread($fp,200);
fclose($fp);
$detail=explode("\n",$bakinfo);
$bk['name']=$file;
$bk['version']=substr($detail[2],10);
$bk['time']=substr($detail[3],8);
$bk['pre']=substr($file,0,$strlen);
$bk['num']=substr($file,$strlen,strrpos($file,'.')-$strlen);
$filedb[]=$bk;
}
}
} elseif($_GET['do']=='bakincheck') {
$pre=$_GET['pre'];
} elseif($_GET['do']=='bakin') {
$pre=$_GET['pre'];
empty($_GET['count']) && $count=$_GET['count'];
if(!$count){
$count=0;
$handle=opendir('include');
while($file = readdir($handle)){
if(eregi("^$pre",$file) && eregi("\.sql$",$file)){
$count++;
}
}
}
$step=!empty($_GET['step']) ? $_GET['step'] : 1;
bakindata(R_P.'include/'.$pre.$step.'.sql');
$i=$step;
$step++;
if($count > 1 && $step <= $count){
echo "<meta http-equiv='refresh' content='0;url=admin.php?job=bak&type=in&do=bakin&step=$step&count=$count&pre=$pre'>";
}
echo "<script language=\"javascript\">alert(\"完成相应操作!\")</script>";
echo "<meta http-equiv='refresh' content='0;url=admin.php?job=bak&type=in'>";
} elseif($_GET['do']=='del') {
$delfile=$_POST['delfile'];
if(!$delfile) {
echo "<script language=\"javascript\">alert(\"没有选择操作对象!\")</script>";
echo "<meta http-equiv='refresh' content='0;url=admin.php?job=bak&type=in'>";
exit;
}
foreach($delfile as $key => $value){
if(eregi("\.sql$",$value)){
@unlink(R_P."include/$value");
}
}
echo "<script language=\"javascript\">alert(\"完成相应操作!\")</script>";
echo "<meta http-equiv='refresh' content='0;url=admin.php?job=bak&type=in'>";
exit;
}
}
}
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 $sizelimit,$tableid,$startfrom,$stop,$rows;
$tableid=$tableid?$tableid-1:0;
$stop=0;
$t_count=count($tabledb);
for($i=$tableid;$i<$t_count;$i++){
$ts=get_one("SHOW TABLE STATUS LIKE '$tabledb[$i]'");
$rows=$ts['Rows'];
$limitadd="LIMIT $start,100000";
$query = 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;
}
}
mysql_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){
foreach($tabledb as $table){
$creattable.= "DROP TABLE IF EXISTS $table;\n";
$CreatTable = 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($filename) {
$sql=file($filename);
$query='';
$num=0;
foreach($sql as $key => $value){
$value=trim($value);
if(!$value || $value[0]=='#') continue;
if(eregi("\;$",$value)){
$query.=$value;
if(eregi("^CREATE",$query)){
$query=preg_replace("/\DEFAULT CHARSET=([a-z0-9]+)/is",'',$query);
}
query($query);
$query='';
} else{
$query.=$value;
}
}
}
require_once template('bak','admin');
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -