⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acp_database.php

📁 这些都是我以前学习是用到的源码
💻 PHP
📖 第 1 页 / 共 4 页
字号:
							$write($fp, $sql_data);							$close($fp);						}						if ($download == true)						{							if (!empty($oper))							{								echo $oper($sql_data);							}							else							{								echo $sql_data;							}							exit;						}						unset($sql_data);						add_log('admin', 'LOG_DB_BACKUP');						trigger_error($user->lang['BACKUP_SUCCESS'] . adm_back_link($this->u_action));					break;					default:						$tables = array();						switch ($db->sql_layer)						{							case 'sqlite':								$sql = "SELECT name									FROM sqlite_master									WHERE type='table'									ORDER BY name";								$result = $db->sql_query($sql);								while ($row = $db->sql_fetchrow($result))								{									if (strpos($row['name'], $table_prefix) === 0)									{										$tables[] = $row['name'];									}								}								$db->sql_freeresult($result);							break;														case 'mysqli':							case 'mysql4':							case 'mysql':								$sql = "SHOW TABLES									LIKE '{$table_prefix}%'";								$result = $db->sql_query($sql);								while ($row = $db->sql_fetchrow($result))								{									$tables[] = current($row);								}								$db->sql_freeresult($result);							break;							case 'postgres':								$sql = 'SELECT relname									FROM pg_stat_user_tables									ORDER BY relname';								$result = $db->sql_query($sql);								while ($row = $db->sql_fetchrow($result))								{									if (strpos($row['relname'], $table_prefix) === 0)									{										$tables[] = $row['relname'];									}								}								$db->sql_freeresult($result);							break;							case 'mssql':							case 'mssql_odbc':								$sql = "SELECT TABLE_NAME									FROM INFORMATION_SCHEMA.TABLES									WHERE TABLE_TYPE = 'BASE TABLE'									ORDER BY TABLE_NAME";								$result = $db->sql_query($sql);								while ($row = $db->sql_fetchrow($result))								{									if (strpos($row['TABLE_NAME'], $table_prefix) === 0)									{										$tables[] = $row['TABLE_NAME'];									}								}								$db->sql_freeresult($result);							break;							case 'firebird':								$sql = 'SELECT RDB$RELATION_NAME as TABLE_NAME									FROM RDB$RELATIONS									WHERE RDB$SYSTEM_FLAG=0										AND RDB$VIEW_BLR IS NULL';								$result = $db->sql_query($sql);								while ($row = $db->sql_fetchrow($result))								{									if (stripos($row['table_name'], $table_prefix) === 0)									{										$tables[] = $row['table_name'];									}								}								$db->sql_freeresult($result);							break;							case 'oracle':								$sql = 'SELECT TNAME as table_name									FROM TAB';								$result = $db->sql_query($sql);								while ($row = $db->sql_fetchrow($result))								{									if (stripos($row['table_name'], $table_prefix) === 0)									{										$tables[] = $row['table_name'];									}								}								$db->sql_freeresult($result);							break;						}						foreach ($tables as $table)						{							$template->assign_block_vars('tables', array(								'TABLE'	=> $table							));						}						$template->assign_vars(array(							'U_ACTION'	=> $this->u_action . '&amp;action=download'						));												$available_methods = array('gzip' => 'zlib', 'bzip2' => 'bz2');						foreach ($available_methods as $type => $module)						{							if (!@extension_loaded($module))							{								continue;							}							$template->assign_block_vars('methods', array(								'TYPE'	=> $type							));						}						$template->assign_block_vars('methods', array(							'TYPE'	=> 'text'						));					break;				}			break;			case 'restore':				switch ($action)				{					case 'submit':						$delete = request_var('delete', '');						$file = request_var('file', '');						preg_match('#^(backup_\d{10,})\.(sql(?:\.(?:gz|bz2))?)$#', $file, $matches);						$file_name = $phpbb_root_path . 'store/' . $matches[0];						if (!(file_exists($file_name) && is_readable($file_name)))						{							trigger_error($user->lang['BACKUP_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING);						}						if ($delete)						{							unlink($file_name);							trigger_error($user->lang['BACKUP_DELETE'] . adm_back_link($this->u_action));						}						$data = file_get_contents($file_name);						switch ($matches[2])						{							case 'sql.bz2':								$data = bzdecompress($data);							break;							case 'sql.gz':								$data = gzinflate(substr($data, 10));							break;						}						$download = request_var('download', '');						if ($download)						{							$name = $matches[0];							switch ($matches[2])							{								case 'sql':									$mimetype = 'text/x-sql';								break;								case 'sql.bz2':									$mimetype = 'application/x-bzip2';								break;								case 'sql.gz':									$mimetype = 'application/x-gzip';								break;							}							header('Pragma: no-cache');							header("Content-Type: $mimetype; name=\"$name\"");							header("Content-disposition: attachment; filename=$name");							echo $data;							die;						}						if (!empty($data))						{							// Strip out sql comments...							remove_remarks($data);							// SQLite gets improved performance when you shove all of these disk write queries at once :D							if ($db->sql_layer == 'sqlite')							{								$db->sql_query($data);							}							else							{								switch ($db->sql_layer)								{									case 'firebird':										$delim = ';;';									break;									case 'mysql':									case 'mysql4':									case 'mysqli':									case 'postgres':										$delim = ';';									break;									case 'oracle':										$delim = '/';									break;									case 'mssql':									case 'mssql-odbc':										$delim = 'GO';									break;								}								$pieces = split_sql_file($data, $delim);								$sql_count = count($pieces);								for($i = 0; $i < $sql_count; $i++)								{									$sql = trim($pieces[$i]);									if (!empty($sql) && $sql[0] != '#')									{										$db->sql_query($sql);									}								}							}						}						add_log('admin', 'LOG_DB_RESTORE');						trigger_error($user->lang['RESTORE_SUCCESS'] . adm_back_link($this->u_action));					break;					default:						$selected = false;						$methods = array('sql');						$available_methods = array('sql.gz' => 'zlib', 'sql.bz2' => 'bz2');						foreach ($available_methods as $type => $module)						{							if (!@extension_loaded($module))							{								continue;							}							$methods[] = $type;						}						$dir = $phpbb_root_path . 'store/';						$dh = opendir($dir);						while (($file = readdir($dh)) !== false)						{							if (preg_match('#^backup_(\d{10,})\.(sql(?:\.(?:gz|bz2))?)$#', $file, $matches))							{								$supported = in_array($matches[2], $methods);								if ($supported == 'true')								{									$template->assign_block_vars('files', array(										'FILE'		=> $file,										'NAME'		=> gmdate("d-m-Y H:i:s", $matches[1]),										'SUPPORTED'	=> $supported									));									$selected = true;								}							}						}						closedir($dh);						if ($selected === true)						{							$template->assign_var('EXISTS', true);						}						$template->assign_vars(array(							'U_ACTION'	=> $this->u_action . '&amp;action=submit'						));					break;				}			break;		}	}	/**	* Return table structure	*/	function get_table_structure($table_name)	{		global $db, $domains_created;		$sql_data = '';		switch ($db->sql_layer)		{			case 'mysqli':			case 'mysql4':			case 'mysql':				$sql_data .= "CREATE TABLE $table_name(\n";				$rows = array();				$sql = "SHOW FIELDS					FROM $table_name";				$result = $db->sql_query($sql);				while ($row = $db->sql_fetchrow($result))				{					$line = '   ' . $row['Field'] . ' ' . $row['Type'];					if (!is_null($row['Default']))					{						$line .= " DEFAULT '{$row['Default']}'";					}					if ($row['Null'] != 'YES')					{						$line .= ' NOT NULL';					}					if ($row['Extra'] != '')					{						$line .= ' ' . $row['Extra'];					}					$rows[] = $line;				}				$db->sql_freeresult($result);				$sql = "SHOW KEYS					FROM $table_name";				$result = $db->sql_query($sql);				$index = array();				while ($row = $db->sql_fetchrow($result))				{					$kname = $row['Key_name'];					if ($kname != 'PRIMARY')					{						if ($row['Index_type'] == 'FULLTEXT')						{							$kname = "FULLTEXT|$kname";						}						else if ($row['Non_unique'] == 0)						{							$kname = "UNIQUE|$kname";						}					}					if ($row['Sub_part'])					{						$row['Column_name'] .= '(' . $row['Sub_part'] . ')';					}					$index[$kname][] = $row['Column_name'];				}				$db->sql_freeresult($result);				foreach ($index as $key => $columns)				{					$line = '   ';					if ($key == 'PRIMARY')					{						$line .= 'PRIMARY KEY (' . implode(', ', $columns) . ')';					}					else if (strpos($key, 'UNIQUE') === 0)					{						$line .= 'UNIQUE ' . substr($key, 7) . ' (' . implode(', ', $columns) . ')';					}					else if (strpos($key, 'FULLTEXT') === 0)					{						$line .= 'FULLTEXT ' . substr($key, 9) . ' (' . implode(', ', $columns) . ')';					}					else					{						$line .= "KEY $key (" . implode(', ', $columns) . ')';					}					$rows[] = $line;				}				$sql_data .= implode(",\n", $rows);				$sql_data .= "\n)";				if ($db->sql_layer == 'mysql4' || $db->sql_layer == 'mysqli')				{					$sql_data .= ' CHARACTER SET `utf8` COLLATE `utf8_bin`';				}				$sql_data .= ";\n\n";			break;			case 'sqlite':				$sql = "SELECT sql					FROM sqlite_master 					WHERE type = 'table' 						AND name = '" . $db->sql_escape($table_name) . "'					ORDER BY type DESC, name;";				$result = $db->sql_query($sql);				$row = $db->sql_fetchrow($result);				$db->sql_freeresult($result);				// Create Table				$sql_data .= $row['sql'] . "\n";				$result = $db->sql_query("PRAGMA index_list('" . $db->sql_escape($table_name) . "');");				$ar = array();				while ($row = $db->sql_fetchrow($result))				{					$ar[] = $row;				}				$db->sql_freeresult($result);								foreach ($ar as $value)				{					if (strpos($value['name'], 'autoindex') !== false)					{						continue;					}					$result = $db->sql_query("PRAGMA index_info('" . $db->sql_escape($value['name']) . "');");					$fields = array();					while ($row = $db->sql_fetchrow($result))					{						$fields[] = $row['name'];					}					$db->sql_freeresult($result);					$sql_data .= 'CREATE ' . ($value['unique'] ? 'UNIQUE ' : '') . 'INDEX ' . $value['name'] . ' on ' . $table_name . ' (' . implode(', ', $fields) . ");\n";				}				$sql_data .= "\n";			break;			case 'postgres':				if (empty($domains_created))				{					$domains_created = array();				}				$sql = "SELECT a.domain_name, a.data_type, a.character_maximum_length, a.domain_default					FROM INFORMATION_SCHEMA.domains a, INFORMATION_SCHEMA.column_domain_usage b					WHERE a.domain_name = b.domain_name						AND b.table_name = '{$table_name}'";				$result = $db->sql_query($sql);				while ($row = $db->sql_fetchrow($result))				{					if (empty($domains_created[$row['domain_name']]))					{						$domains_created[$row['domain_name']] = true;						$sql_data .= "CREATE DOMAIN {$row['domain_name']} as {$row['data_type']}";						if (!empty($row['character_maximum_length']))						{							$sql_data .= '(' . $row['character_maximum_length'] . ')';						}						$sql_data .= ' NOT NULL';						if (!empty($row['domain_default']))						{							$sql_data .= 'DEFAULT ' . $row['domain_default'];						}						$sql_data .= ";\n";					}				}				// PGSQL does not "tightly" bind sequences and tables, we must guess...				$sql = "SELECT relname					FROM pg_class					WHERE relkind = 'S'						AND relname = '{$table_name}_seq'";				$result = $db->sql_query($sql);				// We don't even care about storing the results. We already know the answer if we get rows back.				if ($db->sql_fetchrow($result))				{					$sql_data .= "DROP SEQUENCE {$table_name}_seq;\n";					$sql_data .= "CREATE SEQUENCE {$table_name}_seq;\n";				}				$db->sql_freeresult($result);			

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -