www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/admina/package.inc.php
<? (!defined('M_COM') || !defined('M_ADMIN')) && exit('No Permission'); include_once M_ROOT."./include/database.fun.php"; load_cache('channels,fchannels'); aheader(); if($action == 'tplpack'){ !checkapermission(116) && amessage(lang('no_apermission')); if($sid && $sid_self) amessage(lang('msite admin item !')); if(!submitcheck('btplpack') && !submitcheck('bdelpack')){ $sqlcompatarr = array('0' => lang('default'),'MYSQL40' => 'MySQL 3.23/4.0.x','MYSQL41' => 'MySQL 4.1.x/5.x'); a_guide('tplpack'); tabheader(lang('export system config data1'),'tplpack','?entry=package&action=tplpack'); trbasic(lang('dbfilename'),'filename',date('ymd').'_'.random(6)); trbasic(lang('sqlcompat'),'sqlcompat',makeoption($sqlcompatarr),'select'); trbasic(lang('usehex'),'usehex','0','radio'); tabfooter('btplpack'); $expfiles = array(); if(is_dir(M_ROOT.'./dynamic/export')){ $expfiles = findfiles(M_ROOT.'./dynamic/export','sql'); } $itemstr = ''; foreach($expfiles as $k => $expfile){ $infos = array(); $fp = fopen(M_ROOT.'./dynamic/export/'.$expfile,'rb'); $idsarr = explode(',', base64_decode(preg_replace("/^# DatafileID:\s*(\w+).*/s", "\\1", fgets($fp, 256)))); fclose ($fp); $infos['filename'] = $expfile; $infos['createdate'] = date("$dateformat $timeformat",$idsarr[0]); $infos['cmsname'] = $idsarr[1].' v'.$idsarr[2]; $infos['version'] = lang($idsarr[4].$idsarr[3]); $infos['filesize'] = ceil(@filesize(M_ROOT.'./dynamic/export/'.$expfile) / 1024); $infos['download'] = "<a href=\"?entry=package&action=download&filename=$infos[filename]\">".lang('download')."</a>"; $itemstr .= "<tr><td align=\"center\" class=\"item1\"><input class=\"checkbox\" type=\"checkbox\" name=\"selectid[$infos[filename]]\" value=\"$infos[filename]\">\n". "<td class=\"item2\"><a href=\"".$cms_abs."dynamic/export/$infos[filename]\">$infos[filename]</a></td>\n". "<td align=\"center\" class=\"item1\">$infos[cmsname]</td>\n". "<td align=\"center\" class=\"item2\">$infos[version]</td>\n". "<td align=\"center\" class=\"item1\">$infos[filesize]</td>\n". "<td align=\"center\" class=\"item2\">$infos[createdate]</td>\n". "<td align=\"center\" class=\"item1\">$infos[download]</td></tr>\n"; } tabheader(lang('export data1 file list'),'delpack','?entry=package&action=tplpack',7); trcategory(array("<input class=\"checkbox\" type=\"checkbox\" name=\"chkall\" class=\"category\" onclick=\"checkall(this.form)\">",lang('config file cname'),lang('cname'),lang('version'),lang('size').'(KB)',lang('export time'),lang('download'))); echo $itemstr; tabfooter('bdelpack',lang('delete')); }elseif(submitcheck('btplpack')){ (!$filename || preg_match("/(\.)(exe|jsp|asp|aspx|cgi|fcgi|pl)(\.|$)/i", $filename)) && amessage(lang('file cname illegal'),'?entry=package&action=tplpack'); // 不处理的表'asession','badwords','langs','mconfigs','msession','wordlinks', $structables = array(//仅需要表结构 'archives','archives_sub','farchives','members','members_sub','orders', ); foreach($channels as $v) $structables[] = 'archives_'.$v['chid']; foreach($fchannels as $v) $structables[] = 'farchives_'.$v['chid']; $datatables = array(//表结构与数据 'altypes','amconfigs','amenus','catalogs','channels','cnconfigs','cnfields','cnodes', 'coclass','commus','cotypes','crprices','crprojects','currencys','fcatalogs','fchannels', 'ffields','fields','freeinfos','gmissions','gmodels','grouptypes','localfiles','mfields', 'mtags','mtconfigs','mtpls','permissions','players','rprojects','shipings','sitemaps', 'sptpls','usergroups','vcatalogs','cufields', ); $cleartables = array(//不需要结构与数据,只需要在原系统上重建即可。 'answers','arecents','comments','cradminlogs','favorites','forders','gurls', 'notaanswer','onlinetime','pays','pms','purchases','taxs','uclasses','userfiles', 'voptions','votes','consults','keywords', ); $db->query('SET SQL_QUOTE_SHOW_CREATE=0', 'SILENT'); $sqlcharset = $dumpcharset = $dbcharset ? $dbcharset : str_replace('-', '', $mcharset); $setnames = $db->version() > '4.1' && (!$sqlcompat || $sqlcompat == 'MYSQL41') ? "SET NAMES '$sqlcharset';\n\n" : ''; if($db->version() > '4.1'){ $db->query("SET NAMES '".$sqlcharset."';\n\n"); $sqlcompat == 'MYSQL40' ? $db->query("SET SQL_MODE='MYSQL40'") : $db->query("SET SQL_MODE=''"); } $dumpfile = './dynamic/export/'.str_replace(array('/', '\\', '.'), '',stripslashes($filename)).'.sql'; $sqldump = ''; foreach($structables as $table) $sqldump .= pack_sqldump($table,0); foreach($datatables as $table) $sqldump .= pack_sqldump($table,1); foreach($cleartables as $table){ $ntable = '{$tblprefix}'.$table; $sqldump .= "TRUNCATE $ntable;\n"; } $idstring = '# DatafileID: '.base64_encode("$timestamp,08CMS,$cms_version,$dumpcharset,$lan_version")."\n"; $sqldump = "$idstring". "# <?exit();?>\n". "# 08CMS ConfigPack Data Dump\n". "# Version: 08CMS v$cms_version\n". "# Date: ".date("Y-m-d",$timestamp)."\n". "# --------------------------------------------------------\n". "# Home: www.08cms.com\n". "# --------------------------------------------------------\n\n\n". "$setnames". $sqldump; $confs = array( array('hometpl',$hometpl,'view'), array('regcode_width', $regcode_width,'visit'), array('regcode_height',$regcode_height,'visit'), array('cms_regcode',$cms_regcode,'visit'), array('thumbwidth',$thumbwidth,'upload'), array('thumbheight',$thumbheight,'upload'), ); foreach($confs as $v){ $sqldump .= "REPLACE INTO ".'{$tblprefix}'."mconfigs (varname, value, cftype) VALUES ('$v[0]','$v[1]','$v[2]');\n"; } @$fp = fopen($dumpfile, 'wb'); @flock($fp, 2); adminlog(lang('export system config data1')); amessage(@!fwrite($fp, $sqldump) ? lang('data1 export failed') : lang('data1 export finish'),'?entry=package&action=tplpack'); }elseif(submitcheck('bdelpack')){ empty($selectid) && amessage(lang('please choose config file'),'?entry=package&action=tplpack'); foreach($selectid as $filename){ @unlink(M_ROOT.'./dynamic/export/'.$filename); } adminlog(lang('delete system config data1 file')); amessage(lang('config file delete finish'),'?entry=package&action=tplpack'); } }elseif($action == 'packsetup'){ !$curuser->infos['isfounder'] && amessage(lang('only founder allow install system config')); if(!submitcheck('bpacksetup')){ a_guide('packsetup'); tabheader(lang('install website config'),'packsetup','?entry=package&action=packsetup'); trbasic(lang('upload folder cname'),'sourcepath'); trbasic(lang('template folder cname'),'tpltarget'); trbasic(lang('sameversion'),'sameversion','1','radio'); tabfooter('bpacksetup'); }else{ !checkapermission('packsetup') && amessage(lang('no_apermission')); if(empty($sourcepath) || empty($tpltarget)){ amessage(lang('please input upload folder or template folder cname'), '?entry=package&action=packsetup'); } if(preg_match("/[^a-z_A-Z0-9]+/",$sourcepath) || preg_match("/[^a-z_A-Z0-9]+/",$tpltarget)){ amessage(lang('upload folder or template folder cname illegal'), '?entry=package&action=packsetup'); } $truesource = M_ROOT.'./dynamic/import/'.$sourcepath; $truetarget = M_ROOT.'./template/'.$tpltarget; if(!is_dir($truesource) || !is_file($truesource.'/package.sql') || !is_dir($truesource.'/template')){ amessage(lang('upload file missing'), '?entry=package&action=packsetup'); } if(is_dir($truetarget)){ amessage(lang('template folder used'), '?entry=package&action=packsetup'); } if(!($fp = @fopen($truesource.'/package.sql','rb'))){ amessage(lang('package.sql file illegal'), '?entry=package&action=packsetup'); } $idsarr = explode(',', base64_decode(preg_replace("/^# DatafileID:\s*(\w+)./s", "\\1", @fgets($fp, 256)))); if(!is_array($idsarr) || count($idsarr) != 5 || $idsarr[1] != '08CMS'){ amessage(lang('package.sql file error'), '?entry=package&action=packsetup'); } if($sameversion && ($idsarr[2] != $cms_version || $idsarr[3] != str_replace('-', '', $mcharset) || $idsarr[4] != $lan_version)){ amessage(lang('config file version error'), '?entry=package&action=packsetup'); } if(!dircopy($truesource.'/template',$truetarget)){ amessage(lang('template copy failed'), '?entry=package&action=packsetup'); } if(is_dir($truesource.'/function') && !dircopy($truesource.'/function',M_ROOT.'./dynamic/function')){ amessage(lang('function dir copy failed'), '?entry=package&action=packsetup'); } $sqldump = fread($fp, filesize($truesource.'/package.sql')); fclose($fp); if(!empty($sqldump)){ $sqlquery = splitsql($sqldump); unset($sqldump); foreach($sqlquery as $sql) { $sql = syntablestruct(trim($sql), $db->version() > '4.1', $dbcharset); if($sql != '') { $sql = str_replace(' {$tblprefix}', " {$tblprefix}", $sql); $db->query($sql, 'SILENT'); if(($sqlerror = $db->error()) && $db->errno() != 1062) { $db->halt('MySQL Query Error', $sql); } } } } $db->query("REPLACE INTO {$tblprefix}mconfigs (varname, value, cftype) VALUES ('templatedir','$tpltarget','view')"); $db->query("INSERT INTO {$tblprefix}members (mid, mname, isfounder, password, email, checked) VALUES ('$memberid', '".$curuser->infos['mname']."', '1', '".$curuser->infos['password']."', '".$curuser->infos['email']."', '1');"); adminlog(lang('install website config')); rebuild_cache(-1,'?entry=menu&menu=tools','?entry=package&action=packsetup'); } }elseif($action == 'download' && $filename){ !checkapermission(116) && amessage(lang('no_apermission')); if($sid && $sid_self) amessage(lang('msite admin item !')); adminlog(lang('download system config data1 file')); file_down(M_ROOT.'./dynamic/export/'.$filename); } function dircopy($source,$destination,$child = 1){ if(!is_dir($source)) return false; mmkdir($destination); $handle=dir($source); while($entry=$handle->read()){ if(($entry != ".") && ($entry != "..")){ if(is_dir($source."/".$entry)){ dircopy($source."/".$entry,$destination."/".$entry,$child); }else{ copy($source."/".$entry,$destination."/".$entry); } } } return true; }