📄 backup.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 + -