📄 ad_mysql.php
字号:
<?php
class ad_mysql
{
var $base_url;
var $mysql_version = "";
var $true_version = "";
var $str_gzip_header = "\x1F媆x08\x00\x00\x00\x00\x00";
function ad_mysql( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
global $HTTP_POST_VARS;
global $HTTP_GET_VARS;
$tmp_in = array_merge( $_GET, $_POST, $_COOKIE );
foreach ( $tmp_in as $k => $v )
{
}
if ( $MEMBER['mgroup'] != $INFO['admin_group'] )
{
$ADMIN->error( "对不起,此功能只有管理员团队用户才能操作使用!" );
}
$DB->query( "SELECT VERSION() AS version" );
if ( !( $row = $DB->fetch_row( ) ) )
{
$DB->query( "SHOW VARIABLES LIKE 'version'" );
$row = $DB->fetch_row( );
}
$this->true_version = $row['version'];
$no_array = explode( ".", preg_replace( "/^(.+?)[-_]?/", "\\1", $row['version'] ) );
$one = !isset( $no_array ) || !isset( $no_array[0] ) ? 3 : $no_array[0];
$two = !isset( $no_array[1] ) ? 21 : $no_array[1];
$three = !isset( $no_array[2] ) ? 0 : $no_array[2];
$this->mysql_version = ( integer )sprintf( "%d%02d%02d", $one, $two, intval( $three ) );
switch ( $IN['code'] )
{
case "dotool" :
$this->run_tool( );
break;
case "runtime" :
$this->view_sql( "SHOW STATUS" );
break;
case "system" :
$this->view_sql( "SHOW VARIABLES" );
break;
case "processes" :
$this->view_sql( "SHOW PROCESSLIST" );
break;
case "runsql" :
$q = $HTTP_POST_VARS['query'] == "" ? $HTTP_GET_VARS['query'] : $HTTP_POST_VARS['query'];
$this->view_sql( trim( urldecode( stripslashes( $q ) ) ) );
break;
case "backup" :
$this->show_backup_form( );
break;
case "safebackup" :
$this->sbup_splash( );
break;
case "dosafebackup" :
$this->do_safe_backup( );
break;
case "export_tbl" :
$this->do_safe_backup( trim( urldecode( stripslashes( $HTTP_GET_VARS['tbl'] ) ) ) );
break;
case "command_backup_form" :
$this->command_backup_form( );
break;
case "do_command_backup" :
$this->do_command_backup( );
break;
case "command_restore_form" :
$this->command_restore_form( );
break;
case "do_command_restore" :
$this->do_command_restore( );
break;
case "manage_backups" :
$this->manage_form( );
break;
case "do_manage" :
$this->do_manage( );
break;
case "ad_del" :
$this->ad_del( );
break;
default :
$this->list_index( );
break;
}
}
function command_backup_form( )
{
global $ADMIN;
global $SKIN;
$ADMIN->page_detail = "<b>论坛数据备份:</b>系统将自动发送一个备份论坛数据的命令给服务器,这样系统就能为你快速的备份大容量的数据库而不会因为网络速度或PHP运行时间问题而产生错误。(注意:如果你的服务器安全模式打开的话可能无法使用此功能)";
$ADMIN->page_title = "论坛数据备份";
$ADMIN->html .= $SKIN->start_form( array(
1 => array( "act", "mysql" ),
2 => array( "code", "do_command_backup" )
) );
$ADMIN->html .= $SKIN->start_table( "论坛数据备份" );
$ADMIN->html .= $SKIN->add_td_row( array( "注意:如果你使用的是 UNIX/Linux 服务器,那么必须在备份数据前修改目录 archive_out 的属性(CHMOD 777)。" ) );
$ADMIN->html .= $SKIN->end_form( "开始备份" );
$ADMIN->html .= $SKIN->end_table( );
$ADMIN->output( );
}
function do_command_backup( )
{
global $ADMIN;
global $SKIN;
global $INFO;
$OS = @php_uname( );
if ( preg_match( "|win|i", $OS ) )
{
$windows = 1;
$unix = 0;
$slash = "\\";
}
else
{
$windows = 0;
$unix = 1;
$slash = "/";
}
$file_name = "db_".date( "Y_m_d" )."_".time( ).".sql";
$path = getcwd( ).$slash."archive_out".$slash.$file_name;
if ( $windows )
{
$getdir = mysql_query( "SHOW VARIABLES like 'basedir'" );
$getdir = mysql_fetch_array( $getdir );
$mysql_bin = $getdir[1].$slash."bin".$slash;
}
else
{
$mysql_bin = "";
}
if ( $INFO['sql_pass'] == "" )
{
$pass = "";
}
else
{
$pass = "-p".$INFO['sql_pass'];
}
$systemstring = sprintf( "%smysqldump --add-locks -qela --add-drop-table -h%s -u%s %s %s > %s", $mysql_bin, $INFO['sql_host'], $INFO['sql_user'], $pass, $INFO['sql_database'], $path );
$result = shell_exec( "{$systemstring}" );
if ( $result == "" )
{
$result = true;
}
if ( filesize( $path ) < 4 )
{
$result = false;
}
if ( !$result )
{
$getdir = mysql_query( "SHOW VARIABLES like 'basedir'" );
$getdir = mysql_fetch_array( $getdir );
$mysql_bin = $getdir[1].$slash."bin".$slash;
if ( $INFO['sql_pass'] == "" )
{
$pass = "";
}
else
{
$pass = "-p".$INFO['sql_pass'];
}
$systemstring = sprintf( "%smysqldump --add-locks -qela --add-drop-table -h%s -u%s %s %s > %s", $mysql_bin, $INFO['sql_host'], $INFO['sql_user'], $pass, $INFO['sql_database'], $path );
$result = shell_exec( "{$systemstring}" );
if ( $result == "" )
{
$result = true;
}
if ( filesize( $path ) < 4 )
{
$result = false;
}
}
@chmod( $path, 511 );
$ADMIN->page_title = "数据备份结果";
$ADMIN->page_detail = "";
if ( $result )
{
$ADMIN->html .= $SKIN->start_table( "数据已经完成备份!" );
$ADMIN->html .= $SKIN->add_td_row( array(
"数据备份文件已经成功建立<br>你现在可以[<a href='archive_out/{$file_name}' target='_blank'>按此下载</a>] SQL 文件。"
) );
$ADMIN->html .= $SKIN->end_table( );
}
else
{
$ADMIN->html .= $SKIN->start_table( "数据备份错误" );
$ADMIN->html .= $SKIN->add_td_row( array( "对不起,无法建立数据备份文件,如果你在目录 archive_out 中找到空的备份文件,请立即删除!" ) );
$ADMIN->html .= $SKIN->end_table( );
}
$ADMIN->output( );
}
function command_restore_form( )
{
global $SKIN;
global $ADMIN;
$ADMIN->page_title = "论坛数据恢复";
$ADMIN->page_detail = "本功能可以让你从数据文件 *.sql 来快速恢复你的大容量论坛数据库。你不必为论坛数据尺寸大小而担心。";
$ADMIN->html .= $SKIN->start_form( array(
1 => array( "act", "mysql" ),
2 => array( "code", "do_command_restore" )
) );
$ADMIN->html .= $SKIN->start_table( "论坛数据恢复" );
$ADMIN->html .= $SKIN->add_td_row( array( "选择论坛数据文件:<br> (注意:系统将只显示目录 archive_out 和/或 archive_in 中的所有 *.sql 文件" ) );
$ADMIN->html .= "<tr><td id='tdrow2'>";
$ADMIN->html .= "<select name='file'>";
$DIR = getcwd( );
$os = @php_uname( );
if ( preg_match( "|win|i", $os ) )
{
$b = "\\";
}
else
{
$b = "/";
}
$out = opendir( $DIR.$b."archive_out" );
while ( $file = readdir( $out ) )
{
if ( preg_match( "|(.*?).sql|", $file ) )
{
$ADMIN->html .= "<option value='".$DIR.$b."archive_out".$b.$file."'>{$file}</option>";
}
}
closedir( $out );
$in = opendir( $DIR.$b."archive_in" );
while ( $file = readdir( $in ) )
{
if ( preg_match( "|(.*?).sql|", $file ) )
{
$ADMIN->html .= "<option value='".$DIR.$b."archive_in".$b.$file."'>{$file}</option>";
}
}
closedir( $in );
$ADMIN->html .= "</select>";
$ADMIN->html .= "</td></tr>";
$ADMIN->html .= $SKIN->end_form( "Restore" );
$ADMIN->html .= $SKIN->end_table( );
$ADMIN->output( );
}
function do_command_restore( )
{
global $SKIN;
global $ADMIN;
global $HTTP_POST_VARS;
global $INFO;
global $DB;
$OS = @php_uname( );
if ( preg_match( "|win|i", $OS ) )
{
$windows = 1;
$unix = 0;
$slash = "\\";
}
else
{
$windows = 0;
$unix = 1;
$slash = "/";
}
if ( $windows )
{
$getdir = mysql_query( "SHOW VARIABLES like 'basedir'" );
$getdir = mysql_fetch_array( $getdir );
$mysql_bin = $getdir[1].$slash."bin".$slash;
}
else
{
$mysql_bin = "";
}
$DB->query( "INSERT INTO ibf_sessions VALUES(1,'','','','','','','','','','')" );
if ( $INFO['sql_pass'] == "" )
{
$pass = "";
}
else
{
$pass = "-p".$INFO['sql_pass'];
}
$systemstring = sprintf( "%smysql -h%s -u%s %s %s < %s", $mysql_bin, $INFO['sql_host'], $INFO['sql_user'], $pass, $INFO['sql_database'], $HTTP_POST_VARS['file'] );
$send = shell_exec( "{$systemstring}" );
$check = $DB->query( "SELECT id FROM ibf_sessions WHERE member_name='' LIMIT 0,1" );
$check = mysql_fetch_array( $check );
if ( $check[0] != 1 )
{
$result = true;
}
if ( $check[0] == 1 )
{
$getdir = mysql_query( "SHOW VARIABLES like 'basedir'" );
$getdir = mysql_fetch_array( $getdir );
$mysql_bin = $getdir[1].$slash."bin".$slash;
$systemstring = sprintf( "%smysql -h%s -u%s %s %s < %s", $mysql_bin, $INFO['sql_host'], $INFO['sql_user'], $pass, $INFO['sql_database'], $HTTP_POST_VARS['file'] );
$send = shell_exec( "{$systemstring}" );
$check = $DB->query( "SELECT id FROM ibf_sessions WHERE member_name='' LIMIT 0,1" );
$check = mysql_fetch_array( $check );
if ( $check[0] != 1 )
{
$result = true;
}
else
{
$result = false;
}
}
$DB->query( "DELETE FROM ibf_sessions WHERE id=1" );
$ADMIN->page_title = "数据恢复结果";
$ADMIN->page_detail = "";
if ( $result )
{
$ADMIN->html .= $SKIN->start_table( "数据恢复成功!" );
$ADMIN->html .= $SKIN->add_td_row( array( "你的数据已经恢复成功" ) );
}
else
{
$ADMIN->html .= $SKIN->start_table( "数据恢复错误" );
$ADMIN->html .= $SKIN->add_td_row( array( "数据恢复发生错误,无法恢复数据..." ) );
}
$ADMIN->html .= $SKIN->end_table( );
$ADMIN->output( );
}
function manage_form( )
{
global $SKIN;
global $ADMIN;
$ADMIN->page_title = "数据文件管理";
$ADMIN->page_detail = "你可以删除不需要的数据备份文件";
$ADMIN->html .= $SKIN->start_form( array(
1 => array( "act", "mysql" ),
2 => array( "code", "do_manage" )
) );
$ADMIN->html .= $SKIN->start_table( "数据文件管理" );
$ADMIN->html .= $SKIN->add_td_row( array( "请选择需要删除的数据文件" ) );
$ADMIN->html .= "<tr><td id='tdrow2'>";
$ADMIN->html .= "<select name='files[]' size='8' multiple>";
$DIR = getcwd( );
$os = @php_uname( );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -