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

📄 backup.php

📁 功能介绍: 1、主要功能
💻 PHP
字号:
<?php

/*
 *程序制作:niuboy
 *版权所有:elstu.com
 *程序名称:驿林mysql数据转换器
 *英文名字:ELin Data Convertor
 *创建时间:2003.10.16
 *版本:v1.0
*/
error_reporting(7);

if ($HTTP_POST_VARS['action']) {
	$action = $HTTP_POST_VARS['action'];
} else if ($HTTP_GET_VARS['action']) {
	$action = $HTTP_GET_VARS['action'];
}

if(isset($convertScript)){
	if(file_exists($convertScript))
		require($convertScript);//for data convert
	else{
		echo "<font color=red><b>请输入转换文件</b></font>";
		unset($HTTP_POST_VARS['action']);unset($action);
	}
}else {
	if(file_exists("./convert.php"))
		require("convert.php");//for data convert
	else{
		echo "<font color=red><b>请输入转换文件</b></font>";
		unset($HTTP_POST_VARS['action']);unset($action);
	}
}


if (function_exists("set_time_limit")==1 and get_cfg_var("safe_mode")==0) {
   @set_time_limit(0);
}

if (isset($action) and ($action=="csvtable" or $action=="sqltable")) {
  $noheader=1;
}

//suppress gzipping
$nozip=1;

require("./global_ini.php");

// data dump functions
function sqldumptable($table, $fp=0) {
  global $DB_site,$dumpSize,$eachfilesize,$dump_flag,$datalinenum,$forumlist,$tablelist;
if(empty($datalinenum)||!isset($datalinenum)){
  $datalinenum=0;//init
  $tablefieldcount=0;
  foreach($tablelist[$table] AS $key => $tablefield){
  	$tablefieldcount++;
  	if($tablefieldcount==1){
  		$fieldlist="(`".$tablefield;
  	}else $fieldlist.="`,`".$tablefield;
  }
  $fieldlist.="`)";
  	
  /*
  $tabledump = "DROP TABLE IF EXISTS $table;\n";
  $tabledump .= "CREATE TABLE $table (\n";

  $firstfield=1;

  // get columns and spec
  $fields = $DB_site->query("SHOW FIELDS FROM $table");
  while ($field = $DB_site->fetch_array($fields)) {
    if (!$firstfield) {
      $tabledump .= ",\n";
    } else {
      $firstfield=0;
    }
    $tabledump .= "   $field[Field] $field[Type]";
    if (!empty($field["Default"])) {
      // get default value
      $tabledump .= " DEFAULT '$field[Default]'";
    }
		if ($field['Null'] != "YES") {
      // can field be null
      $tabledump .= " NOT NULL";
    }
    if ($field['Extra'] != "") {
      // any extra info?
      $tabledump .= " $field[Extra]";
    }
  }
  $DB_site->free_result($fields);

  // get keys list
  $keys = $DB_site->query("SHOW KEYS FROM $table");
  while ($key = $DB_site->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'];
  }
  $DB_site->free_result($keys);

  // get each key info
  while(list($kname, $columns) = @each($index)){
    $tabledump .= ",\n";
    $colnames=implode($columns,",");

    if($kname == "PRIMARY"){
      // do primary key
      $tabledump .= "   PRIMARY KEY ($colnames)";
    } else {
      // do standard key
      if (substr($kname,0,6) == "UNIQUE") {
        // key is unique
        $kname=substr($kname,7);
      }

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

    }
  }

  $tabledump .= "\n);\n\n";
  if ($fp) {
    fwrite($fp,$tabledump);
    $dumpSize+=strlen($tabledump);
  } else {
    echo $tabledump;
  }*/
}
  // get data

  $rows = $DB_site->query("SELECT * FROM $table");
  if($datalinenum>0)
    mysql_data_seek($rows,$datalinenum);
//  $numfields=$DB_site->num_fields($rows);
  while ($row = $DB_site->fetch_array($rows)) {
    $tabledump = "INSERT INTO `".$forumlist[$table]."` ".$fieldlist." VALUES(";

    $fieldcounter=-1;
    $firstfield=1;
    // get each field's data
    //while (++$fieldcounter<$numfields) {
    foreach($tablelist[$table] AS $key => $tablefield){
      if ($firstfield!=1) {
        $tabledump.=", ";
      } else {
        $firstfield=0;
      }

      if (!isset($row[$key])) {
        $tabledump .= "''";
      } else {
        $tabledump .= "'".mysql_escape_string($row[$key])."'";
      }
    }

    $tabledump .= ");\n";
    
    if ($fp) {
      fwrite($fp,$tabledump);
      $dumpSize+=strlen($tabledump);
    } else {
      echo $tabledump;
    }
    $datalinenum++;
    if($dumpSize>=$eachfilesize){
      $dump_flag=1;
      break;
    }else{
      $dump_flag=0;
    }
  }
  if($dump_flag==0){
     $datalinenum="";
     unset($datalinenum);
  }

  $DB_site->free_result($rows);
  //return $tabledump;
}

function csvdumptable($table,$separator,$quotes,$showhead) {
  global $DB_site;

  // get columns for header row
  if ($showhead) {
    $firstfield=1;
    $fields = $DB_site->query("SHOW FIELDS FROM $table");
    while ($field = $DB_site->fetch_array($fields)) {
      if (!$firstfield) {
        $contents.=$separator;
      } else {
        $firstfield=0;
      }
      $contents.=$quotes.$field['Field'].$quotes;
    }
    $DB_site->free_result($fields);
  }
  $contents.="\n";


  // get data
  $rows = $DB_site->query("SELECT * FROM $table");
  $numfields=$DB_site->num_fields($rows);
  while ($row = $DB_site->fetch_array($rows)) {

    $fieldcounter=-1;
    $firstfield=1;
    while (++$fieldcounter<$numfields) {
      if (!$firstfield) {
        $contents.=$separator;
      } else {
        $firstfield=0;
      }

      if (!isset($row[$fieldcounter])) {
        $contents .= "NULL";
      } else {
        $contents .= $quotes.addslashes($row[$fieldcounter]).$quotes;
      }
    }

    $contents .= "\n";
  }
  $DB_site->free_result($rows);

  return $contents;
}

if ($HTTP_POST_VARS['action']=="csvtable") {
  header("Content-disposition: filename=".$table.".csv");
  header("Content-type: unknown/unknown");

  echo csvdumptable($table,$separator,$quotes,$showhead);

  exit;

}

if ($HTTP_POST_VARS['action']=="sqltable") {
	header("Content-disposition: filename=vbulletin.sql");
	header("Content-type: unknown/unknown");

	$result=$DB_site->query("SHOW tables");
	while (list($key,$val)=each($table)) {
		if ($val==1) {
		  sqldumptable($key);
		  echo "\n\n\n";
		}
	}

  exit;

}

cpheader();

if (isset($action)==0) {
  $action="choose";
}

if ($action=="choose") {

  ?>
  <p>欢迎使用——驿林mysql数据转换器</p>
  <p>你可以在这里备份你的论坛数据库。</p>

  <P><b>SQL 数据导出:</b></p>

  <?php
/*
  doformheader("backup","sqltable");
  maketableheader("在备份文件中所要包含的数据表");

  $result=$DB_site->query("SHOW tables");
  while ($currow=$DB_site->fetch_array($result)) {
    makeyesnocode($currow[0],"table[$currow[0]]",1);
  }

  doformfooter("创建备份");
*/

  doformheader("backup","sqlfile");
  maketableheader("在服务器上保存转换后的数据文件:");
  if(empty($filename))$filename="dbfile".date("m-d-Y",time()).".sql";
  if(empty($eachfilesize))$eachfilesize=10000000;
  makeinputcode("在服务器上的路径和文件名","filename",$filename,0,60);
  makeinputcode("单个文件大小(byte)","eachfilesize",$eachfilesize,0,60);
  makeinputcode("输入数据库转换脚本","convertScript",$convertScript,0,60);
  makehiddencode("linenum",$linenum);
  makehiddencode("filenum",$filenum);
  makehiddencode("datalinenum",$datalinenum);
  echo "<tr class='firstalt'><td colspan='2'><p><b>PHP必须在此目录中有写入权限</b>(一般设置此目录的属性为 0777)</p></td></tr>\n";
  echo "<tr class='firstalt'><td colspan='2'><p><b>警告:</b> 请不要将备份文件放置到互联网上不安全的目录内。如果可能的话请将它放在论坛根目录以外的目录!</p></td></tr>\n";
  doformfooter("保存文件");
/*
  doformheader("backup","csvtable");
  maketableheader("CSV方式导出数据:");

  echo "<tr class='".getrowbg()."'>\n<td><p>选择数据表:</p></td>\n<td><p>";
  echo "<select name=\"table\" size=\"1\">\n";

  $result=$DB_site->query("SHOW tables");
  while ($currow=$DB_site->fetch_array($result)) {
    echo "<option value=\"$currow[0]\">$currow[0]</option>\n";
  }

  echo "</select></p></td></tr>\n\n";

  makeinputcode("分隔","separator",",");
  makeinputcode("引用","quotes","'");
  makeyesnocode("显示字段名","showhead",1);

  doformfooter("创建");
*/
}

if ($HTTP_POST_VARS['action']=="sqlfile") {echo "enter";
  $filehandle=fopen($filename,"w");
  $result=$DB_site->query("SHOW tables");
  if($linenum<0||empty($linenum))$linenum=0;
  if(mysql_data_seek($result,$linenum)){
  	$filenum++;
	  if($string_end=strrpos($filename,"_")){
	  	$filename=substr($filename,0,$string_end);
	  	$filename=$filename."_".$filenum.".sql";
	  }elseif($string_end=strrpos($filename,".")) {
	  	$filename=substr($filename,0,$string_end);
	  	$filename=$filename."_".$filenum.".sql";
	  }else $filename=$filename."_".$filenum.".sql";
  while ($currow=$DB_site->fetch_array($result)) {
  	if(in_array($currow[0],$forumlist)||isset($forumlist[$currow[0]])){
		sqldumptable($currow[0], $filehandle);
		echo "<p>正在转换并导出 $currow[0]</p>";
	}
		if($dump_flag==1)break;
	//	fwrite($filehandle, "\n\n\n");
		$linenum++;
  }
  if($dumpSize<$eachfilesize)
      $dumpok=1;
}else $dumpok=1;
  fclose($filehandle);
if($dumpok==1)
  echo "<p>数据已成功导出!</p>";
else{
  doformheader("backup","sqlfile");
//  maketableheader("在服务器上保存数据文件:");
  if(empty($filename))$filename="dbfile".date("m-d-Y",time()).".sql";
  if(empty($eachfilesize))$eachfilesize=10000000;
  makehiddencode("filename",$filename);
  makehiddencode("eachfilesize",$eachfilesize);
  makehiddencode("linenum",$linenum);
  makehiddencode("filenum",$filenum);
  makehiddencode("datalinenum",$datalinenum);
  $dispnum=$filenum+1;
  doformfooter("保存文件(".$dispnum.")",0);
}
cpfooter();
}
exit;
?>
//
<script language="javascript">//自动刷新的Javascritp语句 
document.location="./backup.php?filename=<? echo $filename."&linenum=".$linenum."&eachfilesize=".$eachfilesize."&filenum=".$filenum."&datalinenum=".$datalinenum;?>";//定位于下一句 
</script>

⌨️ 快捷键说明

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