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

📄 database.php

📁 SSCMS网站管理系统 飞狐源码站 SSCMS可以将网站内容全部生成静态HTML文件,这样可以极大地节约主机资源
💻 PHP
字号:
<?php
class CPage extends Page {
    function CPage(&$app)
    {
        $this->Page($app);
    }
	
	function page_load()
    {    
        if (empty($this->in['act'])) $this->onlist();
    }

	function onlist(){
		$tablelist=$this->db->getTables(DATABASE);
		$this->tpl->assign('tablelists',$tablelist);
		$this->tpl->display('admin/admin_db.html');
	}

	function onoperation(){
		
		if($this->in[o]=='backup'){
			$volume = intval($this->in[volume]) + 1;
			$ver=VERSION;
			if($this->in[multivol]){
				$multivol=$this->in[multivol];
				$sizelimit=$this->in[sizelimit];
				$table=is_array($this->in[tablename])?$this->in[tablename]:explode(',',$this->in[table]);
				$this->db->query("SET SQL_QUOTE_SHOW_CREATE = 0");

			$sqldump = '';
			$tableid = $this->in[tableid ]? $this->in[tableid] - 1 : 0;
			$startfrom = intval($this->in[startfrom]);
			for($i = $tableid; $i < count($table) && strlen($sqldump) < $this->in[sizelimit] * 1000; $i++) {
				$sqldump .= $this->db->sqldumptable($table[$i], $startfrom, strlen($sqldump));
				$startfrom = 0;
			}
			$tableid = $i;
			$idstring = '# Identify: '.base64_encode(time().",$ver,$this->in[multivol],$volume")."\n";

			$filename=$this->in[filename]?$this->in[filename]:DIR_BACKUP.'CMS_backup_'.date("Y_m_d_mis").'.sql';
			$dumpfile = substr($filename, 0, strrpos($filename, '.'))."-%s".strrchr($filename, '.');

			if(trim($sqldump)) {
				$sqldump = "$idstring".
					"#\n".
					"# SSCMS  Multi-Volume Data Dump Vol.$volume\n".
					"# Version: SSCMS $ver\n".
					"# Time: ".date("Y-m-d H:m")."\n".
					"#\n".
					"# SSCMS Home: http://www.ss-cms.com\n".
					"# Please visit our website for newest infomation about SSCMS\n".
					"# --------------------------------------------------------\n\n\n".
					$sqldump;
		
				@$fp = fopen(($this->in[multivol] ? sprintf($dumpfile, $volume) : $filename), 'w');
				@flock($fp, 2);
				if(@!fwrite($fp, $sqldump)) {
					@fclose($fp);
					$this->page_debug($this->app->getSysMsg('export_file_invalid'),"index.php?module=database&act=",'');
				} else {
					$tables=implode(',',$table);
					$startrow=$this->db->startrow;
					$this->page_debug($this->app->getSysMsg('export_multivol_redirect'), "index.php?module=database&act=operation&o=backup&filename=$filename&multivol=1&sizelimit=$sizelimit&volume=$volume&tableid=$tableid&startfrom=$startrow&table=$tables");
				}
			} else {
				$volume--;
				$filelist = '<ul>';
				$index="<Backup>\n";
				for($i = 1; $i <= $volume; $i++) {
					$filename = sprintf($dumpfile, $i);
					$index.="<File>".basename($filename)."</File>\n";
					$filelist .= "<li><a href=\"$filename\">$filename</a></li>\n";
				}
				$filelist .='</ul>';
				$index .='</Backup>';
				@$fp = fopen(str_replace('-%s.sql','_index.xml',$dumpfile), 'w');
				@flock($fp, 2);
				@fwrite($fp, $index);
				@fclose($fp);
				$this->page_debug($filelist.$this->app->getSysMsg('export_multivol_succeed'),"index.php?module=database&act=",'');
			}
			}else{
				$sql="# Database: " . $this->database . "\n# Database Server: " . $this->host . "\n#\n# Backup Date:" . date( 'Y-m-d' ) . "\n\n";
				if(is_array($this->in[tablename])){
					foreach($this->in[tablename] as $table){
						$sql.=$this->db->sqldumptable($table);
					}
				}
				$filename=DIR_BACKUP.'CMS_backup_'.date("Y_m_d_mis").'.sql';
				$this->app->includeClass("Files");
				$Files=new Files;
				if($Files->write($filename,$sql)){
					$index="<Backup>\n";
					$index.="<File>".basename($filename)."</File>\n";					
				$index .='</Backup>';
				@$fp = fopen(str_replace('.sql','_index.xml',$filename), 'w');
				@flock($fp, 2);
				@fwrite($fp, $index);
				@fclose($fp);
					$this->page_debug($this->app->getSysMsg('backup_ok'),"index.php?module=database&act=",'');
				}else{
					$this->page_debug($this->app->getSysMsg('dir_can_not_write'),"index.php?module=database&act=",'');
				}
			}
		}else{
			if(is_array($this->in[tablename])){
				foreach($this->in[tablename] as $table){
					$tables_query = $this->db->query( "OPTIMIZE TABLE`" . $table . "`" );
					$tables = $this->db->fetch_array( $tables_query );
					$result[$table]=$tables;
				}
			}
			$this->tpl->assign('tablelists',$this->in[tablename]);
			$this->tpl->assign('result',$result);
			$this->tpl->display('admin/admin_db_result.html');
		}
	}

	function onrestore(){
		$path=DIR_BACKUP;		
		if(!$this->in[o]){
			$this->app->includeClass("FileManager");
			$FileManager=new FileManager;
			$dirlist=$FileManager->fileList($path,$listChildDirs=false,$onlyDir=false,$showPre=ture,$order="name",$checkSon=false);
			foreach($dirlist as $key => $var){
				if($var[lastName]=='xml'){
					$apos = strpos($var['name'], ".");
					$name = substr($var['name'], 0, $apos);
					$v['name']=$name;
					$v['filename']=$var['name'];
					$Indexs[]=$v;
				}
			}
			$this->tpl->assign('backIndexs',$Indexs);
			$this->tpl->display('admin/admin_db_restore.html');
		}else{
			$this->app->includeClass("Files");
			$Files=new Files;
			if($this->in[run]==''){				
				$xml=$Files->read($path.$this->in[RestoreIndex]);
				preg_match_all("#<File>(.*)</File>#iUs",$xml,$match);
				$files=urlencode(implode(';',$match[1]));
				$this->page_debug($this->app->getSysMsg('restore_initialize'),"index.php?module=database&act=restore&o=1&run=1&file=$files",'');
			}else{
				$files=explode(';',$this->in[file]);
				$volume = intval($this->in[volume]);
				$file=$files[$volume];
				$sqldump=$Files->read($patch.$file);
				$sqlquery = $this->splitsql($sqldump);
				unset($sqldump);
				foreach($sqlquery as $sql) {
					if(trim($sql) != '') {
						$this->db->query($sql);
					}
				}
				$volume = $volume +1;
				$filess=urlencode(implode(';',$files));
				if($volume<count($files)){
					$msg=$this->app->getSysMsg('restore_file').'<B>'.$file.'</B><br>';
					$this->page_debug($msg,"index.php?module=database&act=restore&o=1&run=1&file=$filess&volume=$volume",'');
				}else $this->page_debug($this->app->getSysMsg('restore_succeed'),"index.php?module=database&act=restore",'');
			}
		}
	}

	
function splitsql($sql){
	$sql = str_replace("\r", "\n", $sql);
	$ret = array();
	$num = 0;
	$queriesarray = explode(";\n", trim($sql));
	unset($sql);
	foreach($queriesarray as $query) {
		$queries = explode("\n", trim($query));
		foreach($queries as $query) {
			$ret[$num] .= $query[0] == "#" ? NULL : $query;
		}
		$num++;
	}
	return($ret);
}
}
?>

⌨️ 快捷键说明

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