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

📄 index.php

📁 MYSQL全系列自导入数据库备份程序 v1.0 支持MYSQL4.1
💻 PHP
📖 第 1 页 / 共 3 页
字号:
	fbutton('submit','dosubmit','下一步');
	fbutton('reset','doreset','重置',"onmouseup=setTimeout('getsize()',100)");
	ffooter();
}

//选择导出方式
if($_POST['action']=="selecttype"){
	$_POST["totalsize"]=0;
	for(@reset($_POST[fsqltable]);count($_POST[fsqltable])&&@list($key,$val)=@each($_POST[fsqltable]);) {
		$_POST["totalsize"]+=$val;
	}
	fheader();
	$_POST["totalsize"]>1024*1024 ? $partsaveck="checked" : $downloadck="checked";
	echo tabletext("选择导出单文件还是多文件:<br>
					数据库太大的话,建议选择多文件导出方式。<br>
					系统会根据所要导出数据量的大小,给出推荐的默认值,<br>
					如果您无法判断您的数据量大小,按默认选定即可。",500);
	echo tablestart("请选择导出方式",500);
	echo tabledata("导出方式:|<br>
					<input name='back_type' value='download' type='radio' $downloadck>生成单个文件并下载 (备份的数据量较大时不建议使用)<br>
					<input name='back_type' value='partsave' type='radio' $partsaveck>分为多个文件并保存在服务器 <br><br>");
	echo tableend();
	echo "
	<script language='JavaScript'>
	function confirmit(){
		with(myform){
			if(back_type[0].checked && ".intval($_POST["totalsize"]).">1024*1024 && !confirm(\"您要导出的数据量比较多({$totalsize_chunk}),建议选择多文件导出方式。\\r\\n点击“确定”继续导出单文件,“取消”返回更改。\"))
				return false;
		}
		return true;
	}
	myform.onsubmit=new Function('return confirmit();');
	</script>
	<input name='action' type='hidden' id='action' value='selectoption'>";
	fbutton('submit','dosubmit','下一步');
	fbutton('reset','doreset','重置');
	ffooter();
}


if($_POST['action']=="selectoption"){
	if($_POST['back_type']=="partsave"){//多文件保存选项
		fheader();
		echo tabletext("您选择了多文件导出方式,总数据量 $totalsize_chunk 字节。<br><br>
						导出的文件将包括一个主文件和多个数据文件,都放在同一个目录下。<br>
						每个数据文件不宜过大,否则容易造成导出或导入超时;而设置得越小则导出的页数越多。<br>
						导入密码在数据库导入时和HTTP方式下载数据文件时使用,请务必牢记。",500);
		echo tablestart("保存选项:",500);
		echo tabledata("存放目录:|<input name='dir' value='{$_POST[db_dbname]}data' type='text' size=20>|相对本程序所在目录,必须有写入权限");
		echo tabledata("主文件名:|<input name='filename' value='index' type='text' size=16>.php|不含扩展名!");
		echo tabledata("生成文件格式:|<input name='extension' value='php' type='radio' checked>.php <input name='extension' value='zip' type='radio'>.zip |.zip 是压缩文件,占空间少但易出错,<br>且安全性不好,易被别人下载");
		echo tabledata("每个数据文件大小:|<input name='filesize' value='1000' type='text' size=10>|单位 KB,1 MB = 1024 KB");
		echo tabledata("导出一页时间间隔:|<input name='nextpgtimeout' value='0' type='text' size=10>|秒,若您的空间不支持频繁提交请设大一点");   
		echo tabledata("数据导入密码:|<input name='back_pass' value='' type='password' size=10>|导入和HTTP下载.php文件时的密码");   
		echo tabledata("确认导入密码:|<input name='back_pass2' value='' type='password' size=10>|&nbsp;");
		echo tableend();
		echo "
		<script language='JavaScript'>
		function confirmit(){
			with(myform){
				if(back_pass.value==''||back_pass.value!=back_pass2.value){
					alert('导入密码不能为空且两次输入密码必须相同。');
					return false;
				}
			}
			return true;
		}
		myform.onsubmit=new Function('return confirmit();');
		</script>
		<input name='action' type='hidden' id='action' value='databackup'>";
		fbutton('submit','dosubmit','下一步');
		fbutton('reset','doreset','重置');
		ffooter();
	}

	if($_POST['back_type']=="download"){//单文件下载选项
		fheader();
		echo tabletext("您选择了单文件导出方式,总数据量 $totalsize_chunk 字节。",500);
		echo tablestart("单文件导出:",500);
		echo tabledata("导出文件名:|<input name='sqlfilename' value='$_POST[db_dbname](".date("Ymd").")_faisunsql.php' type='text' size='40'>");
		echo tabledata("生成文件格式:|<input name='extension' value='php' type='radio' checked>.php <input name='extension' value='zip' type='radio'>.zip <input name='extension' value='gz' type='radio'>.gz");
		echo tableend();
		echo "<input name='action' type='hidden' id='action' value='databackup'>";
		fbutton('submit','dosubmit','导出');
		fbutton('reset','doreset','重置');
		ffooter();
	}
}

if($_POST['action']=="databackup"){

	function escape_string($str){
		$str=mysql_escape_string($str);
		$str=str_replace('\\\'','\'\'',$str);
		$str=str_replace("\\\\","\\\\\\\\",$str);
		$str=str_replace('$','\$',$str);
		return $str;
	}

	function sqldumptable($table,$tableid,$part=0) {
		if($part) global $lastcreate_temp,$current_size,$_POST;;

		//structure
		if($tableid>=intval($_POST[nextcreate]) or $part==0){
			@mysql_query("SET SQL_QUOTE_SHOW_CREATE = 1");
			$query=mysql_query("SHOW CREATE TABLE `$table`");
			$row=mysql_fetch_row($query);
			$sql=str_replace("\n","\\n",str_replace("\"","\\\"",$row[1]));
			$sql=preg_replace("/^(CREATE\s+TABLE\s+`$table`)/mis","",$sql);
			$dumpstring="create(\"$table\",\"$sql\");\r\n\r\n";
			$_POST[nextcreate]++;
			dealdata($dumpstring);
			mysql_free_result($query);
		}		

		//data
		$query = mysql_query("SELECT count(*) as count FROM `$table` ");
		$count = mysql_fetch_array($query);
		$query = mysql_query("SELECT * FROM `$table` limit ".intval($_POST[lastinsert]).",$count[count] ");
		$numfields = mysql_num_fields($query);
		$dump_values = "";
		while ($row = mysql_fetch_row($query)) {
			$dump_values .= ($dump_values?",\r\n":"")."(";
			for ($i=0;$i<$numfields;$i++) {
				if(stristr(mysql_field_flags($query,$i),"BINARY")){ //二进制处理
					$row[$i] = '\''."\".base64_decode('".base64_encode(addslashes($row[$i]))."').\"".'\'';
				}else if (!isset($row[$i]) or is_null($row[$i])) {
					$row[$i] = "NULL";
				}else {
					$row[$i] = '\''.escape_string($row[$i]).'\'';
				}
			}
			$dump_values .= implode(",",$row).")";
			$value_stop = 0;
			$value_len = strlen($dump_values);

			$_POST[lastinsert]++;

			if($value_len>100000 || ($part && $current_size+$value_len>=intval($_POST["filesize"])*1024)){ //0.1M 左右
				$dumpstring = "insert(\"$dump_values\");\r\n\r\n";
				dealdata($dumpstring);
				$dump_values = "";
			}
		}
		if($dump_values){
			$dumpstring = "insert(\"$dump_values\");\r\n\r\n";
			dealdata($dumpstring);
		}
		mysql_free_result($query);
		
		//end of table
		$dumpstring = "tableend(\"$table\");\r\n\r\n";
		dealdata($dumpstring);
		$_POST[tabledumping]++;
		$_POST[lastinsert]=0;
	}

	function timeformat($time){
		return substr("0".floor($time/3600),-2).":".substr("0".floor(($time%3600)/60),-2).":".substr("0".floor($time%60),-2);
	}
	
	function mysql_functions(){
		return '
		@mysql_connect($_POST[db_host],$_POST[db_username],$_POST[db_password]) or die("<div id=pageendTag></div><BR><BR><center>不能连接服务器或连接超时!请返回检查您的配置。</center> $showmywin0");
		if (mysql_get_server_info()> \'4.1\'){ mysql_query("SET NAMES `".$_POST[db_code]."`"); }


		if(!@mysql_select_db($_POST[db_dbname])){
			global $_POST;
			if(!$_POST[db_autocreate]){echo "<div id=pageendTag></div><BR><BR><center>数据库[{$_POST[db_dbname]}]不存在!请返回检查您的配置。</center> $showmywin0";exit;	}
			if(!mysql_query("CREATE DATABASE `$_POST[db_dbname]`")){echo "<div id=pageendTag></div><BR><BR><center>数据库[{$_POST[db_dbname]}]不存在且自动创建失败!请返回检查您的配置。</center> $showmywin0";exit;}
			mysql_select_db("$_POST[db_dbname]");
		}
		function query($sql){
			global $_POST;
			if(!mysql_query($sql)){
				echo "<BR><BR><font color=red>MySQL语句错误!您可能发现了程序的BUG!<a href=\"mailto:faisun@sina.com\">请报告开发者。</a>
				  	<BR>版本:V'.VERSION.'<BR>语句:<XMP>$sql</XMP>错误信息: ".mysql_error()." </font>" ;
				if(trim($_POST[db_temptable])) query("DROP TABLE IF EXISTS `$_POST[db_temptable]`;");
				exit;
			}
		}
		function create($table,$sql){
			global $_POST;
			if(!trim($_POST[db_temptable])){
				do{
					$_POST[db_temptable]="_faisunsql".rand(100,10000);
				}while(@mysql_query("select * from `$_POST[db_temptable]`"));
			}
			query("CREATE TABLE `$_POST[db_temptable]` $sql");
			if(!$_POST[db_safttemptable]) query("DROP TABLE IF EXISTS `$table`;");
		}
		function insert($data){
			global $_POST;
			query("INSERT IGNORE INTO `$_POST[db_temptable]` VALUES $data;");
		}
		function tableend($table){
			global $_POST;
			if($_POST[db_safttemptable]) query("DROP TABLE IF EXISTS `$table`;");
			query("ALTER TABLE `$_POST[db_temptable]` RENAME `$table`");
		}';
	}
	
	function auto_submit_script(){
		return "echo \"<script language='Javascript'>
				try{finisheditem.focus();}catch(e){}
				function checkerror(frame){
					if(top.mainFrame1.location.href!=top.mainFrame2.location.href||(frame.document && !frame.document.all.postingTag && frame.document.all.pageendTag)){
						postingTag.innerHTML='faisunSQL:提交出现错误.正在自动<a href=\'javascript:myform.submit();\'>重新提交</a>...';
						myform.submit();
					}
				}
				nextpgtimeout = parseFloat('\$_POST[nextpgtimeout]')?parseFloat('\$_POST[nextpgtimeout]'):0;
				if(top.myframeset&&this.window.name=='mainFrame1'){
					myform.target='mainFrame2';
					setInterval('checkerror(top.mainFrame2)',10000+1000*nextpgtimeout);
				}
				if(top.myframeset&&this.window.name=='mainFrame2'){
					myform.target='mainFrame1';
					setInterval('checkerror(top.mainFrame1)',10000+1000*nextpgtimeout);
				}
				setTimeout('myform.submit();',1000*nextpgtimeout);
				</script>\";
		";
	}
	
	if($_POST[back_type]=="partsave"): ////////////////////////   Save Data ////////////////////////////

		if($_POST[extension]=="zip"){
			include("faisunsql_files/zipclass.php");
			if(@function_exists('gzcompress')){
				$fsqlzip=new PHPzip;
				$fsqlzip->gzfilename="$_POST[dir]/$_POST[filename].$_POST[extension]";
			}
			else{ fheader();echo "<BR><BR><center>压缩文件格式需要系统支持。</center><BR><BR>";ffooter();exit; }
		}

		if(!$_POST[tabledumping]) $_POST[tabledumping]=0; //正在导出的表
		if(!$_POST[nextcreate]) $_POST[nextcreate]=0; //待建立的表
		if(!$_POST[lastinsert]) $_POST[lastinsert]=0;
		if(!$_POST[page]) $_POST[page]=0;

		if(!is_dir("$_POST[dir]") and !@mkdir("$_POST[dir]",0777)){
			fheader();echo "<BR><BR><center>目录'$_POST[dir]'不存在且不能自动创建!请检查目录权限(权限为 777 方可写文件)。</center><BR><BR>";ffooter();exit;
		}
		@chmod("$_POST[dir]",0777);

		//是否有多余的文件
		$dfileNo=0;
		$open=opendir($_POST["dir"]);
		$delhtml="";
		while($afilename=readdir($open) and !$_POST[filedeled]){
			$checked="";
			if(substr($afilename,0,strlen($_POST[filename]))==$_POST[filename]){
				$checked="checked";
			}
			if(is_file("$_POST[dir]/$afilename")){
				$delhtml.=tabledata("$afilename|".date("Y-m-d",filectime("$_POST[dir]/$afilename"))."|".num_bitunit(filesize("$_POST[dir]/$afilename"))."|<center><input name='dfile[$dfileNo]' type='checkbox' value='$_POST[dir]/$afilename' $checked></center>");
				$dfileNo++;
			}
		}

		//多余文件处理
		if($dfileNo){
			$_POST[filedeled]=1;
			fheader();
			echo tabletext("'$_POST[dir]/'中以下文件已存在,它们可能被覆盖或成为额外的文件。<br>您可以有选择地删除它们或返回上一步重新设定:",500);
			echo tablestart("选择要删除的文件:",500);
			echo tabledata("<strong>文件名</strong>|<strong>修改日期</strong>|<strong>大小</strong>|<center><strong>反选</strong><input type='checkbox' name='checkbox' value='' onclick='selrev();'></center>","31%|32%|21%|16%");
			echo $delhtml;
			echo tableend();
			echo "
			<script language='JavaScript'>
			function selrev() {
				with(myform) {
					for(i=0;i<elements.length;i++) {
						thiselm = elements[i];
						if(thiselm.name.match(/dfile\[\w+\]/))	thiselm.checked = !thiselm.checked;
					}
				}
			}
			</script>";
			fbutton('submit','dosubmit','删除并继续');
			fbutton('reset','doreset','重置');
			fbutton('button','dogoback','返回修改','onclick=\'history.back();\'');
			ffooter();
			exit;
		}

		//删除多余文件
		if($_POST[filedeled]==1){
			for(@reset($_POST["dfile"]);@list($key,$val)=@each($_POST["dfile"]);){
				if($val) unlink($val);
			}
			unset($_POST["dfile"]);
		}
		$_POST[filedeled]=2;

		//开始导出前的预处理
		if($_POST[page]==0){
			//写入图片
			if(isset($fsqlzip)){
				/* 先写成临时文件 .tmp,全导出后,再改名为正式文件。
				   实际上, PHPzip 类每加入一个文件该压缩文件都是完整的。
				   这里这样做是为了防止浏览器后退引起的加入相同的文件。
				*/
				if(!$fsqlzip->startfile("$fsqlzip->gzfilename.tmp")){
					fheader();echo "试图向目录'$_POST[dir]'写入压缩文件时发生错误,请检查目录权限!";ffooter();exit;
				}
				$fsqlzip->addfile(implode('',file("faisunsql_files/faisunsqllogo.gif")),"{$_POST[filename]}_faisunsqllogo.gif","$fsqlzip->gzfilename.tmp");
			}else{
				if(!@copy("faisunsql_files/faisunsqllogo.gif","$_POST[dir]/{$_POST[filename]}_faisunsqllogo.gif")){
					fheader();echo "试图向目录'$_POST[dir]'写入LOGO图片时发生错误,请检查目录权限!";ffooter();exit;
				}
			}

			$_POST[page]=1;
			fheader();
			echo tablestart("目录权限正确");
			echo tabledata("<br>经测试,该目录可以写入文件,LOGO图片已成功写入。<br>下面开始导出数据并保存在服务器中。<br><br>");
			echo tableend();
			fbutton('submit','dosubmit','开始自动导出');
			ffooter();
			exit;
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -