在公司(网络)的服务器上有很多网站,我上传网站时对其他瓦干也有同样的权限。所以就想把同事的网站荡下来学习一下。有了源代码,没有数据库什么也运行不了啊。服务器的数据库是安网站开的,每一个网站把*.sql发给服务器管理员,由管理员导入到数据库中。但是数据库账号密码不能登陆只能执行sql语句。所以我就想起来做一个简易的,类似于phpmyadmin的数据库导出功能。这样我就可以轻松的获得所有网站的数据库了。
用这个程序可以实现简单的数据导出(生成的脚本可直接在phpmyadmin执行)。进一步的功能还可以慢慢扩展。当然不要用来盗用别人机密的冬冬了。
其中解析的数据类型还不全,只是集中简单的常用类型。如果那位仁兄,发现了其他不适用的类型,请告诉我mailto:[email protected]。

index.php
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>数据库备份</title> <style type="text/css"> .borderoff{ border-style:none; background-color:#F3F3F3} </style> </head> <body> <table width="100%" border="0" cellspacing="1" cellpadding="0" align="center"> <tr valign="top"> <td height="378"><br> <form action="cmd.php" method="post" name="backup" target="_blank" id="backup"> <table width="500" border="0" cellspacing="1" cellpadding="4" align="center"> <tr> <td colspan="2" align="center">数据库备份</td> </tr> <tr bgcolor="#F3F3F3"> <td width="166" align="right"> 服务器名:</td> <td width="313"><input name="hostname" type="text" class="borderoff" value="localhost" size="35" maxlength="50"> </td> </tr> <tr bgcolor="#F3F3F3"> <td width="166" align="right"> 数据库名:</td> <td width="313"><input name="database" type="text" class="borderoff" value="yes_da" size="35" maxlength="50"> </td> </tr> <tr bgcolor="#F3F3F3"> <td width="166" align="right">账 号:</td> <td width="313"><input name="username" type="text" class="borderoff" value="root" size="35" maxlength="50"> </td> </tr> <tr bgcolor="#F3F3F3"> <td width="166" align="right">密 码:</td> <td width="313"><input name="password" type="text" class="borderoff" size="35" maxlength="50"> </td> </tr> <tr bgcolor="#F3F3F3"> <td width="166" align="right"> 完全备份:</td> <td width="313"> <input type="radio" name="backup_type" value="full" checked> </td> </tr> <tr bgcolor="#F3F3F3"> <td width="166" align="right">只备份结构:</td> <td width="313"> <input type="radio" name="backup_type" value="structure"> </td> </tr> <tr bgcolor="#F3F3F3"> <td width="166" align="right">只备份数据:</td> <td width="313"> <input type="radio" name="backup_type" value="data"> </td> </tr> <tr bgcolor="#F3F3F3"> <td width="166" align="right">采用压缩格式:</td> <td width="313"> <input type="radio" name="gzipcompress" value="0" checked> 否 <input type="radio" name="gzipcompress" value="1"> 是(zip)</td> </tr> <tr> <td colspan="2" align="center"> <input name="backupstart" type="submit" value="开始备份"> </td> </tr> </table> </form> <p align="center"> <br> <br> </p></td> </tr> </table> </body> </html>
cmd.php
<?php if(isset($_POST['backupstart'])) { $hostname = trim($_POST['hostname']); $database = trim($_POST['database']); $username = trim($_POST['username']); $password = trim($_POST['password']); $backtype = $_POST['backup_type']; $gz = $_POST['gzipcompress']; $link = @mysql_pconnect($hostname, $username, $password); if(!$link) { //连接数据库 echo "数据库打开出错!"; exit(); }//end if $table_list = get_table_list($link,$database); if($table_name===false) { //检索数据库的表 echo "数据库打开出错!!"; exit(); }//end if //echo "<pre>"; //print_r($table_list); $table_code = ""; while(list($key,$table_name)=each($table_list)) { //执行对每一个表的数据返回 if($backtype!="data") { //备份结构 $table_code .= get_table_code($link,$database,$table_name); }//end if if($backtype!="structure") { //备份数据 $table_code .= get_table_data($link,$database,$table_name); }//end if }//end while //echo $table_code; if($gz==0) { //输出 $filename = $database.".sql"; $handle = fopen($filename, "a+"); $temp = fwrite($handle, $table_code); echo $temp; fclose($handle); //header("location:",$filename); echo "<script>location.replace('".$filename."');</script>"; }elseif($gz==1){ $filename = $database.".zip"; $fp = gzopen($filename, "w9"); gzwrite($fp,$table_code); gzclose($fp); //header("location:",$filename); echo "<script>location.replace('".$filename."');</script>"; }//end if }else{ echo "连接错误!!!"; exit(); }//end if //***************************************************************** //函数名:get_table_list //功能:返回指定数据库中的所有表名 //参数:$link 是数据库连接 // $database 数据库名 //时间:2004年3月23日 //作者:野马 //QQ:46163020 //Email:[email protected] //***************************************************************** function get_table_list($link,$database) { $result = @mysql_list_tables($database); if(!$result) {//判断打开是否出错 return false; }//end if while($row = mysql_fetch_row($result)) { $table_name[] = $row[0]; }//end while mysql_free_result($result); return $table_name; }//end function //***************************************************************** //函数名:get_table_code //功能:返回指定数据库中表的结构,用于创建指定表的SQL语句 //参数:$link 是数据库连接 // $database 数据库名 // $table_name表名 //时间:2004年3月23日 //作者:野马 //QQ:46163020 //Email:[email protected] //***************************************************************** function get_table_code($link,$database,$table_name) { mysql_select_db($database, $link); $result = mysql_query("select * from ".$table_name, $link); $return_str = "CREATE TABLE `".$table_name."` (\n\t"; $fields_num = (int)mysql_num_fields($result); $fun_my['string'] = "varchar"; $fun_my['datetime'] = "datetime"; $fun_my['blob'] = "text"; $fun_my['real'] = "float"; echo "<br>"; for($i=0; $i < $fields_num; $i++) { $return_str .= "`".mysql_field_name($result, $i)."` "; $type = mysql_field_type($result, $i); if(isset($fun_my[$type])) { //解析数据类型 if($fun_my[$type]=="datetime" || $fun_my[$type]=="text") { $return_str .= $fun_my[$type]." "; }else{ $return_str .= $fun_my[$type]."(".mysql_field_len($result, $i).") "; }//end if }else{ $return_str .= $type."(".mysql_field_len($result, $i).") "; }//end if if($i==0) { // $return_str .= "NOT NULL auto_increment "; }else{ $return_str .= mysql_field_flags($result, $i)=="not_null"?"NOT NULL ":"default NULL "; }//end if $return_str .= ",\n\t"; }//end for $return_str .= "PRIMARY KEY (`id`)\n)TYPE=MyISAM AUTO_INCREMENT=30;\n\n"; return $return_str; }//end function //***************************************************************** //函数名:get_table_data //功能:返回指定数据库指定表的所有数据的,插入SQL语句 //参数:$link 是数据库连接 // $database 数据库名 // $table_name表名 //时间:2004年3月23日 //作者:野马 //QQ:46163020 //Email:[email protected] //***************************************************************** function get_table_data($link,$database,$table_name) { mysql_select_db($database, $link); $result = mysql_query("select * from ".$table_name, $link); $fields_num = (int)mysql_num_fields($result); while($row = mysql_fetch_row($result)) { $row_data = "INSERT INTO `".$table_name."` VALUES ('"; for($i=0;$i<$fields_num;$i++) { $row_data_arr[$i]=addslashes($row[$i]); }//end if //print_r($row_data_arr); $row_data .= implode("','",$row_data_arr); $row_data .= "');\n"; $table_data .= $row_data; }//end while $table_data .= "\n\n"; return $table_data; }//end function ?> 
|