📄 sql.php
字号:
<?php/*################################################################ mysql backup/restore script based on:#### backupDB() - MySQL database backup utility## backupDB() by James Heinrich <info@silisoftware.com>## available at http://www.silisoftware.com#### modified, extended, migrated bzrudi71#################################################################*/$version="1.2.2";/* query Admin email address (in case of backup failure a notice is send) */$adr_query=$GLOBALS['db']->Execute("SELECT email FROM ".PREFIX."users WHERE groups like '%;".get_group_id_from_name('admin').";%' ORDER BY id ASC");$address=$adr_query->FetchRow();// If any MySQL table errors occur, a notice will be sent hereif(!empty($address[0])):define('ADMIN_EMAIL', "$address[0]");endif;/* get timestamp from config. we append this to the backupfilenames for security reasons...If missing store new value once*/;if(strlen($time_query=read_config("file_time"))>2){ $backuptimestamp = $time_query;}else{ $backuptimestamp = time(); write_config("file_time", $backuptimestamp);}define('BACKTICKCHAR', '');define('QUOTECHAR', '\'');define('BUFFER_SIZE', 32768);define('TABLES_PER_COL', 40);$GZ_enabled = (bool) function_exists('gzopen');$DHTMLenabled = TRUE; // set $DHTMLenabled = FALSE to prevent JavaScript errors in Netscape // set $DHTMLenabled = TRUE to get the nice DHTML display in IE 4.0+/* check for OS to make sure the right line terminator is used */(strtoupper(substr(PHP_OS,0,3)) == "WIN") ? $LineTerminator = "\r\n" : $LineTerminator ="\n";//$LineTerminator = "\n"; // set to "\n" for UNIX-style // set to "\r\n" for Windows-style // set to "\r" for Macintosh-style$fullbackupfilename = 'db_backup_full-'.$backuptimestamp.'.sql'.($GZ_enabled ? '.gz' : '');$partbackupfilename = 'db_backup_partial-'.$backuptimestamp.'.sql'.($GZ_enabled ? '.gz' : '');$strubackupfilename = 'db_backup_structure-'.$backuptimestamp.'.sql'.($GZ_enabled ? '.gz' : '');$tempbackupfilename = 'db_backup.temp.sql'.($GZ_enabled ? '.gz' : '');$db_connect_filename= 'db_connect.'.$backuptimestamp.'.php';/* OK, now we have to rebuild the "real" path to the users webroot. This is some kindof trick but works. The original way failed on vservers and ~xyz homes ;-) */// we use the scriptname to build the path/*$scriptname=$_SERVER['PATH_TRANSLATED'];if(empty($scriptname)): $scriptname=$HTTP_SERVER_VARS['PATH_TRANSLATED']; endif; //globals on*/$backupabsolutepath = realpath(TOP_DIR).'/sql/';/* db_connect.php file backup (we do this silent as it's not of users interest)*/@copy($backupabsolutepath.'db_connect.php', $backupabsolutepath."$db_connect_filename");chmod($backupabsolutepath.$db_connect_filename,0600); // change permissions (SECURITY)if (!function_exists('getmicrotime')) { function getmicrotime() { list($usec, $sec) = explode(' ', microtime()); return ((float) $usec + (float) $sec); }}echo "<blockquote>";print("<H2>$mysql_info_header $version</H2>");if (isset($_REQUEST['StartBackup'])) { echo '<A class="admin" HREF='.@$PHP_SELF.'?page=sql&plugins=1>'.$mysql_cancel.'</A><BR><BR>';}if ($DHTMLenabled) { echo '<SPAN ID="statusinfo"></SPAN>';} else { print("$mysql_DHTML_hint");}ob_flush();flush();if (isset($_REQUEST['StartBackup']) && ($_REQUEST['StartBackup'] == 'partial')) { echo '<SCRIPT LANGUAGE="JavaScript">'.$LineTerminator.'<!--'.$LineTerminator.'function CheckAll(checkornot) {'.$LineTerminator; echo 'for (var i = 0; i < document.SelectedTablesForm.elements.length; i++) {'.$LineTerminator; echo ' document.SelectedTablesForm.elements[i].checked = checkornot;'.$LineTerminator; echo '}'.$LineTerminator.'}'.$LineTerminator.'-->'.$LineTerminator.'</SCRIPT>'; echo '<FORM NAME="SelectedTablesForm" METHOD="POST" ACTION="'.@$PHP_SELF.'?page=sql&plugins=1">'; $db_name_list = mysql_list_dbs(); while (list($dbname) = mysql_fetch_array($db_name_list)) { if (!defined('DB_NAME') || (defined('DB_NAME') && (DB_NAME == $dbname))) { $tables = mysql_list_tables($dbname); if (is_resource($tables)) { echo '<TABLE class=admintable><TR><TH class=maintable COLSPAN="'.ceil(mysql_num_rows($tables) / TABLES_PER_COL).'"><B>'.$dbname.'</B></TH></TR><TR><TD class=admintable>'; $tablecounter = 0; while (list($tablename) = mysql_fetch_array($tables)) { if ($tablecounter++ >= TABLES_PER_COL) { echo '</TD><TD class=admintable>'; $tablecounter = 0; } $SQLquery = 'SELECT COUNT(*) AS num FROM '.$tablename; mysql_select_db($dbname); $result = mysql_query($SQLquery); $row = mysql_fetch_array($result); echo '<INPUT TYPE="CHECKBOX" NAME="SelectedTables['.htmlentities($dbname, ENT_QUOTES).'][]" VALUE="'.$tablename.'" CHECKED>'.$tablename.' ('.$row['num'].')<BR>'; } echo '</TD></TR></TABLE><BR>'; } } } print("<INPUT TYPE='BUTTON' OnClick='CheckAll(true)' VALUE='$mysql_select_all'>"); print("<INPUT TYPE='BUTTON' OnClick='CheckAll(false)' VALUE='$mysql_deselect_all'>"); echo '<INPUT TYPE="HIDDEN" NAME="StartBackup" VALUE="complete">'; print("<INPUT TYPE='SUBMIT' NAME='SelectedTablesOnly' VALUE='$mysql_create_backup'></FORM>"); print("<A class='admin' HREF='admin.php?page=sql&plugins=1'>$mysql_back_menu</A>");} else if (isset($_REQUEST['StartBackup'])) { /* OK do it the local file path way. fails at servers using "private homes i.e ~bzrudi/ */ if (($GZ_enabled && ($zp = gzopen($backupabsolutepath.$tempbackupfilename, 'wb'))) || (!$GZ_enabled && ($fp = fopen($backupabsolutepath.$tempbackupfilename, 'wb')))){ $fileheaderline = '# LinPHA MySQL backup v'.$version.''.$LineTerminator.'# mySQL backup ('.date('F j, Y g:i a').') Type = '; if ($GZ_enabled) { gzwrite($zp, $fileheaderline, strlen($fileheaderline)); } else { fwrite($fp, $fileheaderline, strlen($fileheaderline)); } if ($_REQUEST['StartBackup'] == 'structure') { if ($GZ_enabled) { gzwrite($zp, 'Structure Only'.$LineTerminator.$LineTerminator, strlen('Structure Only'.$LineTerminator.$LineTerminator)); } else { fwrite($fp, 'Structure Only'.$LineTerminator.$LineTerminator, strlen('Structure Only'.$LineTerminator.$LineTerminator)); } $backuptype = 'full'; unset($SelectedTables); $db_name_list = mysql_list_dbs(); while (list($dbname) = mysql_fetch_array($db_name_list)) { if (!defined('DB_NAME') || (defined('DB_NAME') && (DB_NAME == $dbname))) { $tables = mysql_list_tables($dbname); if (is_resource($tables)) { $tablecounter = 0; while (list($tablename) = mysql_fetch_array($tables)) { $SelectedTables["$dbname"][] = $tablename; } } } } } else if (isset($_REQUEST['SelectedTables']) && is_array($_REQUEST['SelectedTables'])) { if ($GZ_enabled) { gzwrite($zp, 'Selected Tables Only'.$LineTerminator.$LineTerminator, strlen('Selected Tables Only'.$LineTerminator.$LineTerminator)); } else { fwrite($fp, 'Selected Tables Only'.$LineTerminator.$LineTerminator, strlen('Selected Tables Only'.$LineTerminator.$LineTerminator)); } $backuptype = 'partial'; $SelectedTables = $_REQUEST['SelectedTables']; } else { if ($GZ_enabled) { gzwrite($zp, 'Complete'.$LineTerminator.$LineTerminator, strlen('Complete'.$LineTerminator.$LineTerminator)); } else { fwrite($fp, 'Complete'.$LineTerminator.$LineTerminator, strlen('Complete'.$LineTerminator.$LineTerminator)); } $backuptype = 'full'; unset($SelectedTables); $db_name_list = mysql_list_dbs(); while (list($dbname) = mysql_fetch_array($db_name_list)) { if (!defined('DB_NAME') || (defined('DB_NAME') && (DB_NAME == $dbname))) { $tables = mysql_list_tables($dbname); if (is_resource($tables)) { $tablecounter = 0; while (list($tablename) = mysql_fetch_array($tables)) { $SelectedTables["$dbname"][] = $tablename; } } } } } if (!$DHTMLenabled) { print("$mysql_table_checks <BR><BR>"); } $TableErrors = array(); foreach ($SelectedTables as $dbname => $selectedtablesarray) { mysql_select_db($dbname); foreach ($selectedtablesarray as $selectedtablename) { if ($DHTMLenabled) { echo '<SCRIPT>statusinfo.innerHTML="'.$mysql_table_check.' <B>'.$dbname.'.'.$selectedtablename.'</B>"</SCRIPT>'; } ob_flush(); flush(); $result = mysql_query('CHECK TABLE '.$selectedtablename); while ($row = mysql_fetch_array($result)) { if ($row['Msg_text'] == 'OK') { mysql_query('OPTIMIZE TABLE '.$selectedtablename); } else { $TableErrors[] = $row['Table'].' ['.$row['Msg_type'].'] '.$row['Msg_text']; if (!isset($TableErrorTables) || !is_array($TableErrorTables) || !in_array($dbname.'.'.$selectedtablename, $TableErrorTables)) { $TableErrorDB[] = $dbname; $TableErrorTables[] = $selectedtablename; } } } } } if ($DHTMLenabled) { echo '<SCRIPT>statusinfo.innerHTML=""</SCRIPT>'; } if (isset($TableErrorTables) && is_array($TableErrorTables)) { for ($t = 0; $t < count($TableErrorTables); $t++) { mysql_select_db($TableErrorDB["$t"]); $fixresult = mysql_query('REPAIR TABLE '.$TableErrorTables["$t"].' EXTENDED'); while ($fixrow = mysql_fetch_array($fixresult)) { $TableErrors[] = $fixrow['Table'].' ['.$fixrow['Msg_type'].'] '.$fixrow['Msg_text']; } } } if (count($TableErrors) > 0) { if (defined('ADMIN_EMAIL') && ADMIN_EMAIL) { mail(ADMIN_EMAIL, 'MySQL Table Error Report', implode($LineTerminator.' * ', $TableErrors)); } echo '<B>TABLE ERRORS!</B><UL><LI>'.implode('</LI><LI>', $TableErrors).'</LI></UL>'; exit; } if ($DHTMLenabled) { echo '<BR><B><SPAN ID="topprogress">'.$mysql_progress.'</SPAN></B><BR>'; } $overallrows = 0; foreach ($SelectedTables as $dbname => $value) { mysql_select_db($dbname); echo '<TABLE class=admintable><TR><TH class=maintable COLSPAN="'.ceil(count($SelectedTables["$dbname"]) / TABLES_PER_COL).'"><B>'.$dbname.'</B></TH></TR><TR><TD class=admintable>'; $tablecounter = 0; for ($t = 0; $t < count($SelectedTables["$dbname"]); $t++) { if ($tablecounter++ >= TABLES_PER_COL) { echo '</TD><TD class=admintable>'; $tablecounter = 1; } $SQLquery = 'SELECT COUNT(*) AS num FROM '.$SelectedTables["$dbname"]["$t"]; $result = mysql_query($SQLquery); $row = mysql_fetch_array($result); $rows["$t"] = $row['num']; $overallrows += $rows["$t"]; echo '<SPAN ID="rows_'.$dbname.'_'.$SelectedTables["$dbname"]["$t"].'">'.$SelectedTables["$dbname"]["$t"].' ('.number_format($rows["$t"]).' records)</span><BR>'; } echo '</TD></TR></TABLE><BR>'; } $starttime = getmicrotime(); $alltablesstructure = ''; foreach ($SelectedTables as $dbname => $value) { mysql_select_db($dbname); for ($t = 0; $t < count($SelectedTables["$dbname"]); $t++) { if ($DHTMLenabled) { echo '<SCRIPT>statusinfo.innerHTML = " '.$mysql_struct_msg.' <B>'.$dbname.'.'.$SelectedTables["$dbname"]["$t"].'</B>"</SCRIPT>'; } $fieldnames = array(); $structurelines = array(); $result = mysql_query('SHOW FIELDS FROM '.$SelectedTables["$dbname"]["$t"]); while ($row = mysql_fetch_array($result)) { $structureline = $row['Field']; $structureline .= ' '.$row['Type']; $structureline .= ' '.($row['Null'] ? '' : 'NOT ').'NULL'; if (isset($row['Default'])) { switch ($row['Type']) { case 'tinytext': case 'tinyblob': case 'text': case 'blob': case 'mediumtext': case 'mediumblob': case 'longtext': case 'longblob': // no default values break; default: $structureline .= ' default \''.$row['Default'].'\''; break; } } $structureline .= ($row['Extra'] ? ' '.$row['Extra'] : ''); $structurelines[] = $structureline; $fieldnames[] = $row['Field']; } mysql_free_result($result); $tablekeys = array(); $uniquekeys = array(); $fulltextkeys = array(); $result = mysql_query('SHOW KEYS FROM '.$SelectedTables["$dbname"]["$t"]); while ($row = mysql_fetch_array($result)) { $uniquekeys[$row['Key_name']] = FALSE; if ($row['Non_unique'] == 0) { $uniquekeys[$row['Key_name']] = TRUE; } $fulltextkeys[$row['Key_name']] = FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -