📄 database.inc.php
字号:
}
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');
} else {
cpmsg('database_import_file_illegal');
}
}
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=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=import&from=server&datafile_server=$datafile_next&autoimport=yes&importsubmit=yes".(!empty($delunzip) ? '&delunzip=yes' : ''));
} else {
updatecache();
cpmsg('database_import_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');
} else {
cpmsg('database_import_format_illegal');
}
} elseif(submitcheck('deletesubmit')) {
if(is_array($delete)) {
foreach($delete as $filename) {
@unlink('./forumdata/'.$backupdir.'/'.str_replace('/', '', $filename));
}
cpmsg('database_file_delete_succeed');
} else {
cpmsg('database_file_delete_invalid');
}
}
} elseif($action == 'runquery') {
$checkperm = checkpermission('runquery', 0);
$runquerys = array();
@include_once(DISCUZ_ROOT.'admin/quickqueries.inc.php');
if(!submitcheck('sqlsubmit')) {
shownav('menu_database_query');
showtips('database_run_query_tips');
$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:60%">'.$runqueryselect.'</select>';
}
$queries = $queryselect ? $runquerys[$queryselect] : '';
?>
<form method="post" action="admincp.php?action=runquery">
<input type="hidden" name="formhash" value="<?=FORMHASH?>">
<input type="hidden" name="option" value="simple">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tableborder">
<tr class="header"><td colspan=2><?=$lang['database_run_query_simply']?></td></tr>
<tr class="altbg1">
<td align="center"><center><?=$runqueryselect?> <input type="submit" name="sqlsubmit" value="<?=$lang['submit']?>"></center></td></tr>
</table>
</form>
<br>
<?
if($checkperm) {
?>
<form method="post" action="admincp.php?action=runquery">
<input type="hidden" name="formhash" value="<?=FORMHASH?>">
<input type="hidden" name="option" value="">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tableborder">
<tr class="header"><td colspan=2><?=$lang['database_run_query']?></td></tr>
<tr class="altbg1">
<td valign="top">
<div align="center">
<br><textarea cols="85" rows="10" name="queries"><?=$queries?></textarea><br>
<br><?=$lang['database_run_query_comment']?></div>
</td></tr></table>
<br><center><input class="button" type="submit" name="sqlsubmit" value="<?=$lang['submit']?>"></center>
</form></td></tr>
<?
}
} else {
if($option == 'simple') {
$queryselect = intval($queryselect);
$queries = isset($simplequeries[$queryselect]) && $simplequeries[$queryselect]['sql'] ? $simplequeries[$queryselect]['sql'] : '';
} elseif(!$checkperm) {
cpmsg('database_run_query_denied');
}
$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());
}
}
}
cpmsg($sqlerror ? 'database_run_query_invalid' : 'database_run_query_succeed');
}
} elseif($action == 'optimize') {
shownav('menu_database_optimize');
showtips('database_optimize_tips');
?>
<form name="optimize" method="post" action="admincp.php?action=optimize">
<input type="hidden" name="formhash" value="<?=FORMHASH?>">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tableborder">
<tr class="header">
<td><input class="checkbox" type="checkbox" name="chkall" class="header" onclick="checkall(this.form)" checked><?=$lang['database_optimize_opt']?></td><td><?=$lang['database_optimize_table_name']?></td><td><?=$lang['type']?></td><td><?=$lang['database_optimize_rows']?></td>
<td><?=$lang['database_optimize_data']?></td><td><?=$lang['database_optimize_index']?></td><td><?=$lang['database_optimize_frag']?></td></tr>
<?
$optimizetable = '';
$totalsize = 0;
$tablearray = empty($supe['tablepre']) ? array( 0 =>$tablepre) : array( 0 => $tablepre, 1 => $supe['tablepre']);
if(!submitcheck('optimizesubmit')) {
foreach($tablearray as $tp) {
$query = $db->query("SHOW TABLE STATUS LIKE '$tp%'");
while($table = $db->fetch_array($query)) {
if($table['Data_free'] && $table[$tabletype] == 'MyISAM') {
$checked = $table[$tabletype] == 'MyISAM' ? 'checked' : 'disabled';
echo "<tr><td class=\"altbg1\" align=\"center\"><input class=\"checkbox\" type=\"checkbox\" name=\"optimizetables[]\" value=\"$table[Name]\" $checked></td>\n".
"<td class=\"altbg2\" align=\"center\">$table[Name]</td>\n".
"<td class=\"altbg1\" align=\"center\">".$table[$tabletype]."</td>\n".
"<td class=\"altbg2\" align=\"center\">$table[Rows]</td>\n".
"<td class=\"altbg1\" align=\"center\">$table[Data_length]</td>\n".
"<td class=\"altbg2\" align=\"center\">$table[Index_length]</td>\n".
"<td class=\"altbg1\" align=\"center\">$table[Data_free]</td></tr>\n";
$totalsize += $table['Data_length'] + $table['Index_length'];
}
}
}
if(empty($totalsize)) {
echo "<tr><td colspan=\"7\" align=\"right\">".$lang['database_optimize_done']."</td></tr></table></div>";
} else {
echo "<tr><td colspan=\"7\" align=\"right\">$lang[database_optimize_used] ".sizecount($totalsize)."</td></tr></table></div><br><center><input class=\"button\" type=\"submit\" name=\"optimizesubmit\" value=\"$lang[submit]\"></center>";
}
} else {
$db->query("DELETE FROM {$tablepre}subscriptions", 'UNBUFFERED');
$db->query("UPDATE {$tablepre}memberfields SET authstr=''", 'UNBUFFERED');
foreach($tablearray as $tp) {
$query = $db->query("SHOW TABLE STATUS LIKE '$tp%'");
while($table = $db->fetch_array($query)) {
if(is_array($optimizetables) && in_array($table['Name'], $optimizetables)) {
$db->query("OPTIMIZE TABLE $table[Name]");
}
echo "<tr>\n".
"<td class=\"altbg1\" align=\"center\">".$lang['yes']."</td>\n".
"<td class=\"altbg2\" align=\"center\">$table[Name]</td>\n".
"<td class=\"altbg1\" align=\"center\">".($db->version() > '4.1' ? $table['Engine'] : $table['Type'])."</td>\n".
"<td class=\"altbg2\" align=\"center\">$table[Rows]</td>\n".
"<td class=\"altbg1\" align=\"center\">$table[Data_length]</td>\n".
"<td class=\"altbg2\" align=\"center\">$table[Index_length]</td>\n".
"<td class=\"altbg1\" align=\"center\">0</td>\n".
"</tr>\n";
$totalsize += $table['Data_length'] + $table['Index_length'];
}
}
echo "<tr><td colspan=\"7\" align=\"right\">$lang[database_optimize_used] ".sizecount($totalsize)."</td></tr></table>";
}
echo '</table></form>';
}
function fetchtablelist($tablepre = '') {
global $db;
!$tablepre && $tablepre = '*';
$tables = $table = array();
$query = $db->query("SHOW TABLE STATUS LIKE '$tablepre%'");
while($table = $db->fetch_array($query)) {
$tables[] = $table;
}
return $tables;
}
function arraykeys2($array, $key2) {
$return = array();
foreach($array as $val) {
$return[] = $val[$key2];
}
return $return;
}
function syntablestruct($sql, $version, $dbcharset) {
if(strpos(trim(substr($sql, 0, 18)), 'CREATE TABLE') === FALSE) {
return $sql;
}
$sqlversion = strpos($sql, 'ENGINE=') === FALSE ? FALSE : TRUE;
if($sqlversion === $version) {
return $sqlversion && $dbcharset ? preg_replace(array('/ character set \w+/i', '/ collate \w+/i', "/DEFAULT CHARSET=\w+/is"), array('', '', "DEFAULT CHARSET=$dbcharset"), $sql) : $sql;
}
if($version) {
return preg_replace(array('/TYPE=HEAP/i', '/TYPE=(\w+)/is'), array("ENGINE=MEMORY DEFAULT CHARSET=$dbcharset", "ENGINE=\\1 DEFAULT CHARSET=$dbcharset"), $sql);
} else {
return preg_replace(array('/character set \w+/i', '/collate \w+/i', '/ENGINE=MEMORY/i', '/\s*DEFAULT CHARSET=\w+/is', '/\s*COLLATE=\w+/is', '/ENGINE=(\w+)(.*)/is'), array('', '', 'ENGINE=HEAP', '', '', 'TYPE=\\1\\2'), $sql);
}
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -