diff --git a/upload/source/admincp/admincp_db.php b/upload/source/admincp/admincp_db.php index d204a6396d77a40ef2877c0ade5ba680f05a6db4..4ceb6a0e81997560ab0c1a1282fc71ef574b6ac8 100644 --- a/upload/source/admincp/admincp_db.php +++ b/upload/source/admincp/admincp_db.php @@ -96,7 +96,7 @@ if($operation == 'export') { showtagfooter('tbody'); showtagheader('tbody', 'advanceoption'); - showsetting('db_export_method', '', '', ''); + showsetting('db_export_method', '', '', ''); showtitle('db_export_options'); showsetting('db_export_options_extended_insert', 'extendins', 0, 'radio'); showsetting('db_export_options_sql_compatible', array('sqlcompat', array( @@ -389,8 +389,9 @@ if($operation == 'export') { ); $exportsize[$key] += $filesize; } elseif(preg_match("/\.zip$/i", $entry)) { + $key = preg_replace('/^(.+?)(\-\d+)\.zip$/i', '\\1', basename($entry)); $filesize = filesize($entry); - $exportziplog[] = array( + $exportziplog[$key] = array( 'type' => 'zip', 'filename' => $entry, 'size' => filesize($entry), @@ -464,13 +465,15 @@ if($operation == 'export') { } foreach($exportziplog as $info) { + sort($val);//修改 确保-1.zip排前面,才会自动解压-2.zip + $info = $val[0]; $info['dateline'] = is_int($info['dateline']) ? dgmdate($info['dateline']) : $lang['unknown']; $info['size'] = sizecount($info['size']); $info['method'] = $info['method'] == 'multivol' ? $lang['db_multivol'] : $lang['db_zip']; $datafile_server = '.'.$info['filename']; showtablerow('', '', array( "", - "".substr(strrchr($info['filename'], "/"), 1)."", + "".substr(strrchr($info['filename'], "/"), 1)."", '', $info['dateline'], $lang['db_export_'.$info['type']], @@ -478,7 +481,23 @@ if($operation == 'export') { $info['method'], '', "$lang[db_import_unzip]" - )); + )); + echo ''; + foreach($val as $info) { + $info['dateline'] = is_int($info['dateline']) ? dgmdate($info['dateline']) : $lang['unknown']; + $info['size'] = sizecount($info['size']); + showtablerow('', '', array( + '', + "".substr(strrchr($info['filename'], "/"), 1)."", + $info['version'], + $info['dateline'], + '', + $info['size'], + '', + "", + '' + )); + } showsubmit('deletesubmit', 'submit', 'del'); @@ -489,13 +508,18 @@ if($operation == 'export') { } else { if(is_array($_GET['delete'])) { foreach($_GET['delete'] as $filename) { + $type = ".sql"; + if(strpos($filename, '-1.zip') !== FALSE) { + $type = ".zip"; + $filename = str_replace('-1.zip', '', $filename); + } $file_path = './data/'.$backupdir.'/'.str_replace(array('/', '\\'), '', $filename); if(is_file($file_path)) { @unlink($file_path); } else { $i = 1; while(1) { - $file_path = './data/'.$backupdir.'/'.str_replace(array('/', '\\'), '', $filename.'-'.$i.'.sql'); + $file_path = './data/'.$backupdir.'/'.str_replace(array('/', '\\'), '', $filename.'-'.$i.$type); if(is_file($file_path)) { @unlink($file_path); $i++; @@ -677,7 +701,9 @@ if($operation == 'export') { if(!C::t('common_setting')->fetch_all_field()) { cpmsg('dbcheck_permissions_invalid', '', 'error'); } - + $installSqlPath = DISCUZ_ROOT.'./install/install.sql'; + if(!file_exists($installSqlPath)) + $installSqlPath = DISCUZ_ROOT.'./install/data/install.sql'; $step = max(1, intval($_GET['step'])); if($step == 3) { @@ -702,7 +728,7 @@ if($operation == 'export') { $except = array('threads' => array('sgid')); foreach(C::t('common_member_profile_setting')->range() as $profilefields) { - $except['memberfields'][] = 'field_'.$profilefields[$fieldid]; + $except['memberfields'][] = 'field_'.$profilefields['fieldid']; } if(submitcheck('repairsubmit') && (!empty($repair) || !empty($setting) || !empty($repairtable) || !empty($missingtable))) { @@ -712,8 +738,8 @@ if($operation == 'export') { foreach($missingtable as $value) { if(!isset($installdata)) { - $fp = fopen(DISCUZ_ROOT.'./install/install.sql', "rb"); - $installdata = fread($fp, filesize(DISCUZ_ROOT.'./install/install.sql')); + $fp = fopen($installSqlPath, "rb"); + $installdata = fread($fp, filesize($installSqlPath)); fclose($fp); } preg_match("/CREATE TABLE ".DB::table($value)."\s+\(.+?;/is", $installdata, $a); @@ -802,7 +828,7 @@ if($operation == 'export') { } } - $installexists = file_exists(DISCUZ_ROOT.'./install/install.sql'); + $installexists = file_exists($installSqlPath); $discuzdbnew = $deltables = $excepttables = $missingtables = $charseterror = array(); foreach($discuzdb as $dbtable => $fields) { if($fieldsquery = DB::query("SHOW FIELDS FROM ".DB::table($dbtable), 'SILENT')) {