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

📄 sql.php

📁 faisunSQL自导入数据库备份程序 使用方法: 直接把“faisunsql.php”上传到PHP+MySQL的服务器并输入其HTTP路径运行即可。 注意:如果您不是一个P
💻 PHP
📖 第 1 页 / 共 3 页
字号:
<br>
<script language='JavaScript'>
<!--
function selrev() {
	with(myform) {
		for(i=0;i<elements.length;i++) {
			thiselm = elements[i];
			if(thiselm.name.match(/table\[\w+\]/))
				thiselm.checked = !thiselm.checked;
		}
	}
	getsize();
}

function getsize(){
 ts=0;
	with(document.myform) {
		for(i=0;i<elements.length;i++) {
			thiselm = elements[i];
			if(thiselm.datalength&&thiselm.checked)
				ts += parseInt(thiselm.datalength);
		}
	totalsize.value=ts=ts.toString();

	i=ts.length;
	ts2='';
	while(i>0){
	  if(ts2)ts2=','+ts2;
	  ts2=ts.substring(i-3,i)+ts2;
	  i-=3;
	}	
	document.all.totalsizetxt.innerHTML=ts2;
	
	}
}
getsize();

-->
</script>
<input name='action' type='hidden' id='action' value='selecttype'>
";
fbutton('submit','dosubmit','下一步',"onclick=getsize()");
fbutton('reset','doreset','重置',"onmouseup=setTimeout('getsize()',100)");
ffooter();
}

if($HTTP_POST_VARS['action']=="selecttype"){
fheader();
if($totalsize>1024*1024) $partsaveck="checked";
else $downloadck="checked";
echo "
<table width='500' border='0' cellspacing='1' cellpadding='3' bgcolor='#1B56C5' align=center>
   <tr> 
     <td><font color='#FFFFFF' colspan='2'><strong>请选择导出方式</strong></font></td>
</tr>
<tr bgcolor='#D6DFF7'><td> 导出方式:</td><td>
<input name='back_type' value='download' type='radio' $downloadck>生成单个文件并下载 (备份的数据量较大时不建议使用)<br>
<input name='back_type' value='partsave' type='radio' $partsaveck>分为多个文件并保存在服务器 
</td></tr>
</table>
<br>

<script language='JavaScript'>
function confirmit(){
	with(myform){
		if(back_type[0].checked && $totalsize>1024*1024 && !confirm(\"您要导出的数据量比较多({$totalsize_chunk} B),建议选择多文件导出方式。\\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($HTTP_POST_VARS['action']=="selectoption"){

	if($HTTP_POST_VARS['back_type']=="partsave"){
fheader();
echo "
您选择了多文件导出方式,总数据量 $totalsize_chunk 字节。<br><br>

<table width='500' border='0' cellspacing='1' cellpadding='3' bgcolor='#1B56C5' align=center>
   <tr> 
      <td><font color='#FFFFFF' colspan='2'><strong>保存选项:</strong></font></td>
</tr>   
<tr bgcolor='#D6DFF7'><td> 存放目录:</td><td> <input name='dir' value='{$db_dbname}sql' type='text' size=10>(相对本程序所在目录,必须有写入权限)</td></tr>
<tr bgcolor='#D6DFF7'><td> 主文件名:</td><td> <input name='filename' value='sqlback' type='text' size=10>.php (不含扩展名!)</td></tr>
<tr bgcolor='#D6DFF7'><td> 每个数据文件大小:</td><td> <input name='filesize' value='100000' type='text' size=10>(单位 B,1 MB = 1048576 B)</td></tr>
<tr bgcolor='#D6DFF7'><td> 数据导入密码:</td><td> <input name='back_pass' value='' type='password' size=10>(为了安全,导入时必须输入此密码)</td></tr>
<tr bgcolor='#D6DFF7'><td> 确认导入密码:</td><td> <input name='back_pass2' value='' type='password' size=10></td></tr>
</table>
<br>
<table width='500' border='0' cellspacing='1' cellpadding='3' bgcolor='#1B56C5' align=center>
   <tr> 
      <td><font color='#FFFFFF' colspan='2'><strong>导入默认配置(导入时仍可更改):</strong></font></td>
</tr>   
<tr bgcolor='#D6DFF7'><td> 服务器:</td><td> <input name='back_host' value='$db_host' type='text'></td></tr>
<tr bgcolor='#D6DFF7'><td> 数据库:</td><td> <input name='back_dbname' value='$db_dbname' type='text'></td></tr>
<tr bgcolor='#D6DFF7'><td> 该数据库不存在时自动创建:</td><td> <input name='back_autocreate' value=' checked ' type='checkbox' checked></td></tr>
</table><br>

<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($HTTP_POST_VARS['back_type']=="download"){
fheader();
echo "
您选择了单文件导出方式,总数据量 $totalsize_chunk 字节。<br><br>
	
<table width='500' border='0' cellspacing='1' cellpadding='3' bgcolor='#1B56C5' align=center>
   <tr> 
      <td><font color='#FFFFFF' colspan='2'><strong>单文件导出-导入默认配置(导入时仍可更改):</strong></font></td>
</tr>   
<tr bgcolor='#D6DFF7'><td> 服务器:</td><td> <input name='back_host' value='$db_host' type='text'></td></tr>
<tr bgcolor='#D6DFF7'><td> 数据库:</td><td> <input name='back_dbname' value='$db_dbname' type='text'></td></tr>
<tr bgcolor='#D6DFF7'><td> 该数据库不存在时自动创建:</td><td> <input name='back_autocreate' value=' checked ' type='checkbox' checked></td></tr>
<tr bgcolor='#D6DFF7'><td> 显示导入过程:</td><td> <input name='back_showlog' value=' checked ' type='checkbox'></td></tr>
</table>
<br>
		<input name='action' type='hidden' id='action' value='databackup'>
";
fbutton('submit','dosubmit','导出');
fbutton('reset','doreset','重置');
ffooter();
	}

}

if($HTTP_POST_VARS['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,$part=0) {
if($part) global $HTTP_POST_VARS,$lastcreate_temp,$tableid;

if(($tableid==0 and $HTTP_POST_VARS[page]==1) or $tableid>$lastcreate_temp or $part==0){
  $dumpstring = "create(\"$table\",\"";

  $dumpstring .= "(";

  $firstfield=1;

  $fields = mysql_query("SHOW FIELDS FROM `$table`");
  while ($field = mysql_fetch_array($fields)) {
    if (!$firstfield) {
      $dumpstring .= ",";
    } else {
      $firstfield=0;
    }
    $dumpstring .= " $field[Field] $field[Type]"; 
    if (!empty($field["Default"])) {
      $dumpstring .= " DEFAULT '$field[Default]'";
    }
		if ($field['Null'] != "YES") {
      $dumpstring .= " NOT NULL";
    }
    if ($field['Extra'] != "") {
      $dumpstring .= " $field[Extra]";
    }
  }
  mysql_free_result($fields);

  $keys = mysql_query("SHOW KEYS FROM `$table`");
  while ($key = mysql_fetch_array($keys)) {
    $kname=$key['Key_name'];
    if ($kname != "PRIMARY" and $key['Non_unique'] == 0) {
      $kname="UNIQUE|$kname";
    }
    if(!is_array($index[$kname])) {
      $index[$kname] = array();
    }
    $index[$kname][] = $key['Column_name'];
  }
  mysql_free_result($keys);

  while(list($kname, $columns) = @each($index)){
    $dumpstring .= ",";
    $colnames=implode($columns,",");

    if($kname == "PRIMARY"){
      $dumpstring .= " PRIMARY KEY ($colnames)";
    } else {
      if (substr($kname,0,6) == "UNIQUE") {
        $kname=substr($kname,7); 
      }

      $dumpstring .= " KEY $kname ($colnames)";

    }
  }

  $dumpstring .= ") ";
  
  $statuses=mysql_query("SHOW TABLE STATUS");
  while($status=mysql_fetch_array($statuses)){
    if($status[Name]==$table){
		$dumpstring .=" Type=$status[Type] COMMENT='$status[Comment]';\");\n\n";
		mysql_free_result($statuses);
		break;
		}
  	else
	   continue;
  }
  if($tableid!=0 and $HTTP_POST_VARS[page]!=1 and $part) $HTTP_POST_VARS[lastcreate]++;
  $HTTP_POST_VARS[lastinsert]=0;
  dealdata($dumpstring);
}

  $rows = mysql_query("SELECT count(*) as count FROM `$table` ");
  $row = mysql_fetch_array($rows);
  $rows = mysql_query("SELECT * FROM `$table` limit $HTTP_POST_VARS[lastinsert],$row[count] ");

  $numfields=mysql_num_fields($rows);
  while ($row = mysql_fetch_array($rows)) {
    $dumpstring = "insert(\"$table\",\"";

    $firstfield=1;

    for ($i=0;$i<$numfields;$i++) {
	
	if($part) $HTTP_POST_VARS[fin]+=strlen($row[$i]); //这个方法计算完成量不是很准确
	
      if (!$firstfield) {
        $dumpstring.=",";
      } else {
        $firstfield=0;
      }

      if (!isset($row[$i])) {
        $dumpstring .= "NULL";
      } else {
        $dumpstring .= "'".escape_string($row[$i])."'";
      }
    }

    $dumpstring .= "\");\n\n";
	
	if($part) $HTTP_POST_VARS[lastinsert]++;
	dealdata($dumpstring);
  }
  mysql_free_result($rows);
}


if($HTTP_POST_VARS[back_type]=="partsave"){////////////////////////   Save Data ////////////////////////////

$current_size=0;
function dealdata($data){
global $HTTP_POST_VARS,$current_size,$tablearr;

$current_size+=strlen($data);
writefile($data);

if($current_size>=intval($HTTP_POST_VARS["filesize"])){
$current_size=0;

writefile("\n ?>");

$HTTP_POST_VARS[page]++;

$finish=intval($HTTP_POST_VARS[fin]/$HTTP_POST_VARS[totalsize]*100);

fheader();
echo "<table width=500  cellspacing='1' cellpadding='3' align=center>
<tr><td><B>faisunSQL正在导出数据……</B></td>
<TR><td width=210 nowrap>
<select size=9>";
for($i=$HTTP_POST_VARS[lastcreate]+1;$i<9;$i++){
	echo "<option></option>\n";
}
while(list($key,$val)=each($tablearr)){
if($key<$HTTP_POST_VARS[lastcreate]){
	echo "<option style='color:#FF0000'>√ $val</option>\n";
}else if($key==$HTTP_POST_VARS[lastcreate]){
	echo "<option selected>-= 以上数据表处理完成 =-</option>
	</select><select size=9>
	<option selected>-= 以下数据表正待处理 =-</option>\n<option>→ $val</option>\n";
}else{
	echo "<option style='color:#666666'>· $val</option>\n";
}

}

echo "</select></td><td valign=top nowrap><BR><BR>正在从数据库'$HTTP_POST_VARS[db_dbname]'中导出数据……
<BR><BR>共有数据 ".num_chunk($HTTP_POST_VARS[totalsize])." 字节,每页导出≥ ".num_chunk(intval($HTTP_POST_VARS[fin]/$HTTP_POST_VARS[page]))." 字节。
<BR><BR>每页生成数据文件≥ ".num_chunk($HTTP_POST_VARS["filesize"])." B ,已生成 ".($HTTP_POST_VARS[page]-1)." 个数据文件。
<BR><BR>本页运行完成! 正在自动进入 <a href='javascript:myform.submit();'>第 $HTTP_POST_VARS[page] 页</a>……
<BR><BR><BR>估计已完成:≥{$finish}% <table width=250 height=12  border=0 cellspacing=1 cellpadding=0 bgcolor='#1B56C5'><tr><td width='$finish%' bgcolor='#1B56C5'><div></div></td><td width='".(100-$finish)."%' bgcolor='#D6DFF7'><div></div></td></tr></table>
<BR><BR>
</td></tr>
</table>";
ffooter();
echo "
<script language='Javascript'>
	myform.submit();
</script>
";

exit();
}
}

⌨️ 快捷键说明

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