?? database.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 + -