⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bak.php

📁 程序安装简便容易
💻 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 + -