📄 database.inc.php
字号:
@unlink($dumpfile);
$mysqlbin = $mysql_base == '/' ? '' : addslashes($mysql_base).'bin/';
@shell_exec($mysqlbin.'mysqldump --force --quick '.($db->version() > '4.1' ? '--skip-opt --create-options' : '-all').' --add-drop-table'.($extendins == 1 ? ' --extended-insert' : '').''.($db->version() > '4.1' && $sqlcompat == 'MYSQL40' ? ' --compatible=mysql40' : '').' --host="'.$dbhost.($dbport ? (is_numeric($dbport) ? ' --port='.$dbport : ' --socket="'.$dbport.'"') : '').'" --user="'.$dbuser.'" --password="'.$dbpw.'" "'.$dbname.'" '.$tablesstr.' > '.$dumpfile);
if(@file_exists($dumpfile)) {
if(@is_writeable($dumpfile)) {
$fp = fopen($dumpfile, 'rb+');
fwrite($fp, $idstring."# <?exit();?>\n ".$setnames."\n #");
fclose($fp);
}
cpmsg('database_export_succeed');
} else {
cpmsg('database_shell_fail');
}
}
}
} elseif($action == 'import') {
if(!submitcheck('importsubmit', 1) && !submitcheck('deletesubmit')) {
$exportlog = array();
if(is_dir(DISCUZ_ROOT.'./forumdata')) {
$dir = dir(DISCUZ_ROOT.'./forumdata');
while($entry = $dir->read()) {
$entry = "./forumdata/$entry";
if(is_file($entry) && 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[$identify[0]] = array( 'version' => $identify[1],
'type' => $identify[2],
'method' => $identify[3],
'volume' => $identify[4],
'filename' => $entry,
'size' => $filesize);
}
}
$dir->close();
} else {
cpmsg('database_export_dest_invalid');
}
krsort($exportlog);
reset($exportlog);
$exportinfo = '';
foreach($exportlog as $dateline => $info) {
$info['dateline'] = is_int($dateline) ? gmdate("$dateformat $timeformat", $dateline + $timeoffset * 3600) : $lang['unknown'];
switch($info['type']) {
case 'full':
$info['type'] = $lang['database_export_full'];
break;
case 'standard':
$info['type'] = $lang['database_export_standard'];
break;
case 'mini':
$info['type'] = $lang['database_export_mini'];
break;
case 'custom':
$info['type'] = $lang['database_export_custom'];
break;
}
$info['size'] = sizecount($info['size']);
$info['volume'] = $info['method'] == 'multivol' ? $info['volume'] : '';
$info['method'] = $info['method'] == 'multivol' ? $lang['database_multivol'] : $lang['database_shell'];
$exportinfo .= "<tr align=\"center\"><td class=\"altbg1\"><input class=\"checkbox\" type=\"checkbox\" name=\"delete[]\" value=\"$info[filename]\"></td>\n".
"<td class=\"altbg2\"><a href=\"$info[filename]\">".substr(strrchr($info['filename'], "/"), 1)."</a></td>\n".
"<td class=\"altbg1\">$info[version]</td>\n".
"<td class=\"altbg2\">$info[dateline]</td>\n".
"<td class=\"altbg1\">$info[type]</td>\n".
"<td class=\"altbg2\">$info[size]</td>\n".
"<td class=\"altbg1\">$info[method]</td>\n".
"<td class=\"altbg2\">$info[volume]</td>\n".
"<td class=\"altbg1\"><a href=\"admincp.php?action=import&from=server&datafile_server=$info[filename]&importsubmit=yes\"".
($info['version'] != $version ? " onclick=\"return confirm('$lang[database_import_confirm]');\"" : '').">[$lang[import]]</a></td>\n";
}
shownav('menu_database_import');
showtips('database_import_tips');
?>
<form name="restore" method="post" action="admincp.php?action=import" enctype="multipart/form-data">
<input type="hidden" name="formhash" value="<?=FORMHASH?>">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tableborder">
<tr class="header">
<td colspan="2"><?=$lang['database_import']?></td>
</tr>
<tr>
<td class="altbg1" width="40%"><input class="radio" type="radio" name="from" value="server" checked onclick="this.form.datafile_server.disabled=!this.checked;this.form.datafile.disabled=this.checked"><?=$lang['database_import_from_server']?></td>
<td class="altbg2" width="60%"><input type="text" size="40" name="datafile_server" value="./forumdata/"></td></tr>
<tr>
<td class="altbg1" width="40%"><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']?></td>
<td class="altbg2" width="60%"><input type="file" size="29" name="datafile" disabled></td></tr>
</table><br><center>
<input class="button" type="submit" name="importsubmit" value="<?=$lang['submit']?>"></center>
</form><br>
<form method="post" action="admincp.php?action=import">
<input type="hidden" name="formhash" value="<?=FORMHASH?>">
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="tableborder">
<tr class="header"><td colspan="9"><?=$lang['database_export_file']?></td></tr>
<tr align="center" class="category"><td width="48"><input class="checkbox" type="checkbox" name="chkall" class="category" onclick="checkall(this.form)"><?=$lang['del']?></td>
<td><?=$lang['filename']?></td><td><?=$lang['version']?></td>
<td><?=$lang['time']?></td><td><?=$lang['type']?></td>
<td><?=$lang['size']?></td><td><?=$lang['database_method']?></td>
<td><?=$lang['database_volume']?></td><td><?=$lang['operation']?></td></tr>
<?=$exportinfo?>
</table><br><center>
<input class="button" type="submit" name="deletesubmit" value="<?=$lang['submit']?>"></center></form>
<?
} elseif(submitcheck('importsubmit', 1)) {
$readerror = 0;
if($from == 'server') {
$datafile = addslashes(dirname(dirname(__FILE__))).'/'.$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, 8388607);
}
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) {
if(trim($sql) != '') {
$db->query($sql, 'SILENT');
if(($sqlerror = $db->error()) && $db->errno() != 1062) {
$db->halt('MySQL Query Error', $sql);
}
}
}
$datafile_next = preg_replace("/-($dumpinfo[volume])(\..+)$/", "-".($dumpinfo['volume'] + 1)."\\2", $datafile_server);
//$datafile_next = str_replace("-$dumpinfo[volume].sql", '-'.($dumpinfo['volume'] + 1).'.sql', $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",
'form');
} elseif($autoimport) {
cpmsg('database_import_multivol_redirect', "admincp.php?action=import&from=server&datafile_server=$datafile_next&autoimport=yes&importsubmit=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($filename);
}
cpmsg('database_file_delete_succeed');
} else {
cpmsg('database_file_delete_invalid');
}
}
} elseif($action == 'runquery') {
if(!submitcheck('sqlsubmit')) {
shownav('menu_database_query');
?>
<form method="post" action="admincp.php?action=runquery">
<input type="hidden" name="formhash" value="<?=FORMHASH?>">
<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"><textarea cols="85" rows="10" name="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 {
$sqlquery = splitsql(str_replace(' cdb_', ' '.$tablepre, $queries));
foreach($sqlquery as $sql) {
if(trim($sql) != '') {
$db->query(stripslashes($sql), 'SILENT');
if($sqlerror = $db->error()) {
break;
}
}
}
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;
if(!submitcheck('optimizesubmit')) {
$query = $db->query("SHOW TABLE STATUS LIKE '$tablepre%'");
while($table = $db->fetch_array($query)) {
$checked = $table['Type'] == 'MyISAM' || $table['Engine'] == '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\">".($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\">$table[Data_free]</td></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></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');
$query = $db->query("SHOW TABLE STATUS LIKE '$tablepre%'");
while($table = $db->fetch_array($query)) {
if(is_array($optimizetables) && in_array($table['Name'], $optimizetables)) {
$optimized = $lang['yes'];
$db->query("OPTIMIZE TABLE $table[Name]");
} else {
$optimized = '<b>'.$lang['no'].'</b>';
}
echo "<tr>\n".
"<td class=\"altbg1\" align=\"center\">$optimized</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>';
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -