📄 database.inc.php
字号:
cpmsg('database_export_succeed', '', 'succeed');
}
} else {
cpmsg('database_shell_fail', '', 'error');
}
}
}
} elseif($operation == 'importzip') {
require_once DISCUZ_ROOT.'admin/zip.func.php';
$unzip = new SimpleUnzip();
$unzip->ReadFile($datafile_server);
if($unzip->Count() == 0 || $unzip->GetError(0) != 0 || !preg_match("/\.sql$/i", $importfile = $unzip->GetName(0))) {
cpmsg('database_import_file_illegal', '', 'error');
}
$identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", substr($unzip->GetData(0), 0, 256))));
$confirm = !empty($confirm) ? 1 : 0;
if(!$confirm && $identify[1] != $version) {
cpmsg('database_import_confirm', 'admincp.php?action=database&operation=importzip&datafile_server=$datafile_server&importsubmit=yes&confirm=yes', 'form');
}
$sqlfilecount = 0;
foreach($unzip->Entries as $entry) {
if(preg_match("/\.sql$/i", $entry->Name)) {
$fp = fopen('./forumdata/'.$backupdir.'/'.$entry->Name, 'w');
fwrite($fp, $entry->Data);
fclose($fp);
$sqlfilecount++;
}
}
if(!$sqlfilecount) {
cpmsg('database_import_file_illegal', '', 'error');
}
$info = basename($datafile_server).'<br />'.$lang['version'].': '.$identify[1].'<br />'.$lang['type'].': '.$lang['database_export_'.$identify[2]].'<br />'.$lang['database_method'].': '.($identify[3] == 'multivol' ? $lang['database_multivol'] : $lang['database_shell']).'<br />';
if(isset($multivol)) {
$multivol++;
$datafile_server = preg_replace("/-(\d+)(\..+)$/", "-$multivol\\2", $datafile_server);
if(file_exists($datafile_server)) {
cpmsg('database_import_multivol_unzip_redirect', 'admincp.php?action=database&operation=importzip&multivol='.$multivol.'&datafile_vol1='.$datafile_vol1.'&datafile_server='.$datafile_server.'&importsubmit=yes&confirm=yes', 'loading');
} else {
cpmsg('database_import_multivol_confirm', 'admincp.php?action=database&operation=import&from=server&datafile_server='.$datafile_vol1.'&importsubmit=yes&delunzip=yes', 'form');
}
}
if($identify[3] == 'multivol' && $identify[4] == 1 && preg_match("/-1(\..+)$/", $datafile_server)) {
$datafile_vol1 = $datafile_server;
$datafile_server = preg_replace("/-1(\..+)$/", "-2\\1", $datafile_server);
if(file_exists($datafile_server)) {
cpmsg('database_import_multivol_unzip', 'admincp.php?action=database&operation=importzip&multivol=1&datafile_vol1=./forumdata/'.$backupdir.'/'.$importfile.'&datafile_server='.$datafile_server.'&importsubmit=yes&confirm=yes', 'form');
}
}
cpmsg('database_import_unzip', 'admincp.php?action=database&operation=import&from=server&datafile_server=./forumdata/'.$backupdir.'/'.$importfile.'&importsubmit=yes&delunzip=yes', 'form');
} elseif($operation == 'import') {
checkpermission('dbimport');
if(!submitcheck('importsubmit', 1) && !submitcheck('deletesubmit')) {
$exportlog = array();
if(is_dir(DISCUZ_ROOT.'./forumdata/'.$backupdir)) {
$dir = dir(DISCUZ_ROOT.'./forumdata/'.$backupdir);
while($entry = $dir->read()) {
$entry = './forumdata/'.$backupdir.'/'.$entry;
if(is_file($entry)) {
if(preg_match("/\.sql$/i", $entry)) {
$filesize = filesize($entry);
$fp = fopen($entry, 'rb');
$identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", fgets($fp, 256))));
fclose ($fp);
$exportlog[] = array(
'version' => $identify[1],
'type' => $identify[2],
'method' => $identify[3],
'volume' => $identify[4],
'filename' => $entry,
'dateline' => filemtime($entry),
'size' => $filesize
);
} elseif(preg_match("/\.zip$/i", $entry)) {
$filesize = filesize($entry);
$exportlog[] = array(
'type' => 'zip',
'filename' => $entry,
'size' => filesize($entry),
'dateline' => filemtime($entry)
);
}
}
}
$dir->close();
} else {
cpmsg('database_export_dest_invalid', '', 'error');
}
shownav('tools', 'nav_db', 'nav_db_import');
showsubmenu('nav_db', array(
array('nav_db_export', 'database&operation=export', 0),
array('nav_db_import', 'database&operation=import', 1),
array('nav_db_runquery', 'database&operation=runquery', 0),
array('nav_db_optimize', 'database&operation=optimize', 0),
array('nav_db_dbcheck', 'database&operation=dbcheck', 0)
));
showtips('database_import_tips');
showtableheader('database_import');
showformheader('database&operation=import', 'enctype');
showtablerow('', array('colspan="2" class="rowform"', 'colspan="7" class="rowform"'), array(
'<input class="radio" type="radio" name="from" value="server" checked="checked" onclick="this.form.datafile_server.disabled=!this.checked;this.form.datafile.disabled=this.checked" />'.$lang[database_import_from_server],
'<input type="text" class="txt" name="datafile_server" value="./forumdata/'.$backupdir.'/" style="width:245px;" />'
));
showtablerow('', array('colspan="2" class="rowform"', 'colspan="8" class="rowform"'), array(
'<input class="radio" type="radio" name="from" value="local" onclick="this.form.datafile_server.disabled=this.checked;this.form.datafile.disabled=!this.checked" />'.$lang[database_import_from_local],
'<input type="file" name="datafile" size="29" disabled="disabled" class="uploadbtn marginbot" />'
));
showsubmit('importsubmit');
showformfooter();
showformheader('database&operation=import');
showtitle('database_export_file');
showsubtitle(array('', 'filename', 'version', 'time', 'type', 'size', 'database_method', 'database_volume', ''));
foreach($exportlog as $info) {
$info['dateline'] = is_int($info['dateline']) ? gmdate("$dateformat $timeformat", $info['dateline'] + $timeoffset * 3600) : $lang['unknown'];
$info['size'] = sizecount($info['size']);
$info['volume'] = $info['method'] == 'multivol' ? $info['volume'] : '';
$info['method'] = $info['type'] != 'zip' ? ($info['method'] == 'multivol' ? $lang['database_multivol'] : $lang['database_shell']) : '';
showtablerow('', '', array(
"<input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"".basename($info['filename'])."\">",
"<a href=\"$info[filename]\">".substr(strrchr($info['filename'], "/"), 1)."</a>",
$info[version],
$info[dateline],
$lang['database_export_'.$info['type']],
$info[size],
$info[method],
$info[volume],
$info['type'] == 'zip' ? "<a href=\"admincp.php?action=database&operation=importzip&datafile_server=$info[filename]&importsubmit=yes\" class=\"act\">$lang[database_import_unzip]</a>" : "<a class=\"act\" href=\"admincp.php?action=database&operation=import&from=server&datafile_server=$info[filename]&importsubmit=yes\"".($info['version'] != $version ? " onclick=\"return confirm('$lang[database_import_confirm]');\"" : '')." class=\"act\">$lang[import]</a>"
));
}
showsubmit('deletesubmit', 'submit', 'del');
showformfooter();
showtablefooter();
} elseif(submitcheck('importsubmit', 1)) {
$readerror = 0;
$datafile = '';
if($from == 'server') {
$datafile = DISCUZ_ROOT.'./'.$datafile_server;
}
if(@$fp = fopen($datafile, 'rb')) {
$sqldump = fgets($fp, 256);
$identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", $sqldump)));
$dumpinfo = array('method' => $identify[3], 'volume' => intval($identify[4]));
if($dumpinfo['method'] == 'multivol') {
$sqldump .= fread($fp, filesize($datafile));
}
fclose($fp);
} else {
if($autoimport) {
updatecache();
cpmsg('database_import_multivol_succeed', '', 'succeed');
} else {
cpmsg('database_import_file_illegal', '', 'error');
}
}
if($dumpinfo['method'] == 'multivol') {
$sqlquery = splitsql($sqldump);
unset($sqldump);
foreach($sqlquery as $sql) {
$sql = syntablestruct(trim($sql), $db->version() > '4.1', $dbcharset);
if($sql != '') {
$db->query($sql, 'SILENT');
if(($sqlerror = $db->error()) && $db->errno() != 1062) {
$db->halt('MySQL Query Error', $sql);
}
}
}
if($delunzip) {
@unlink($datafile_server);
}
$datafile_next = preg_replace("/-($dumpinfo[volume])(\..+)$/", "-".($dumpinfo['volume'] + 1)."\\2", $datafile_server);
if($dumpinfo['volume'] == 1) {
cpmsg('database_import_multivol_prompt',
"admincp.php?action=database&operation=import&from=server&datafile_server=$datafile_next&autoimport=yes&importsubmit=yes".(!empty($delunzip) ? '&delunzip=yes' : ''),
'form');
} elseif($autoimport) {
cpmsg('database_import_multivol_redirect', "admincp.php?action=database&operation=import&from=server&datafile_server=$datafile_next&autoimport=yes&importsubmit=yes".(!empty($delunzip) ? '&delunzip=yes' : ''), 'loading');
} else {
updatecache();
cpmsg('database_import_succeed', '', 'succeed');
}
} elseif($dumpinfo['method'] == 'shell') {
require './config.inc.php';
list($dbhost, $dbport) = explode(':', $dbhost);
$query = $db->query("SHOW VARIABLES LIKE 'basedir'");
list(, $mysql_base) = $db->fetch_array($query, MYSQL_NUM);
$mysqlbin = $mysql_base == '/' ? '' : addslashes($mysql_base).'bin/';
shell_exec($mysqlbin.'mysql -h"'.$dbhost.($dbport ? (is_numeric($dbport) ? ' -P'.$dbport : ' -S"'.$dbport.'"') : '').
'" -u"'.$dbuser.'" -p"'.$dbpw.'" "'.$dbname.'" < '.$datafile);
updatecache();
cpmsg('database_import_succeed', '', 'succeed');
} else {
cpmsg('database_import_format_illegal', '', 'error');
}
} elseif(submitcheck('deletesubmit')) {
if(is_array($delete)) {
foreach($delete as $filename) {
@unlink('./forumdata/'.$backupdir.'/'.str_replace(array('/', '\\'), '', $filename));
}
cpmsg('database_file_delete_succeed', '', 'succeed');
} else {
cpmsg('database_file_delete_invalid', '', 'error');
}
}
} elseif($operation == 'runquery') {
$checkperm = checkpermission('runquery', 0);
$runquerys = array();
@include_once(DISCUZ_ROOT.'admin/quickqueries.inc.php');
if(!submitcheck('sqlsubmit')) {
$runqueryselect = '';
foreach($simplequeries as $key => $query) {
if(empty($query['sql'])) {
$runqueryselect .= "<optgroup label=\"$query[comment]\">";
} else {
$runqueryselect .= '<option value="'.$key.'">'.$query['comment'].'</option>';
}
}
if($runqueryselect) {
$runqueryselect = '<select name="queryselect" style="width:500px">'.$runqueryselect.'</select>';
}
$queries = $queryselect ? $runquerys[$queryselect] : '';
shownav('tools', 'nav_db', 'nav_db_runquery');
showsubmenu('nav_db', array(
array('nav_db_export', 'database&operation=export', 0),
array('nav_db_import', 'database&operation=import', 0),
array('nav_db_runquery', 'database&operation=runquery', 1),
array('nav_db_optimize', 'database&operation=optimize', 0),
array('nav_db_dbcheck', 'database&operation=dbcheck', 0)
));
showtips('database_run_query_tips');
showtableheader();
showformheader('database&operation=runquery&option=simple');
showsetting('database_run_query_simply', '', '', $runqueryselect);
showsubmit('sqlsubmit');
showformfooter();
if($checkperm) {
showformheader('database&operation=runquery&option=');
showsetting('database_run_query', '', '', '<textarea cols="85" rows="10" name="queries" style="width:500px;">'.$queries.'</textarea>');
showsubmit('sqlsubmit', 'submit', '', lang('database_run_query_comment'));
showformfooter();
}
showtablefooter();
} else {
if($option == 'simple') {
$queryselect = intval($queryselect);
$queries = isset($simplequeries[$queryselect]) && $simplequeries[$queryselect]['sql'] ? $simplequeries[$queryselect]['sql'] : '';
} elseif(!$checkperm) {
cpmsg('database_run_query_denied', '', 'error');
}
$sqlquery = splitsql(str_replace(array(' cdb_', ' {tablepre}', ' `cdb_'), array(' '.$tablepre, ' '.$tablepre, ' `'.$tablepre), $queries));
$affected_rows = 0;
foreach($sqlquery as $sql) {
if(trim($sql) != '') {
$db->query(stripslashes($sql), 'SILENT');
if($sqlerror = $db->error()) {
break;
} else {
$affected_rows += intval($db->affected_rows());
}
}
}
$sqlerror ? cpmsg('database_run_query_invalid', '', 'error') : cpmsg('database_run_query_succeed', '', 'succeed');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -