$val) { if (is_array($val)) { foreach ($val as $key2=>$val2) { if ($config['magic_quotes_gpc']) $restore[stripslashes($key)][stripslashes($key2)]=stripslashes($val2); else $restore[$key][$key2]=$val2; } } } include ('./'.$config['files']['parameter']); $restore['max_zeit']=intval($config['max_execution_time']*$config['time_buffer']); if ($restore['max_zeit']==0) $restore['max_zeit']=20; $restore['startzeit']=time(); $restore['xtime']=(isset($_POST['xtime'])) ? $_POST['xtime'] : time(); $restore['fileEOF']=false; // Ende des Files erreicht? $restore['actual_table']=(!empty($_POST['actual_table'])) ? $_POST['actual_table'] : 'unbekannt'; $restore['offset']=(!empty($_POST['offset'])) ? $_POST['offset'] : 0; $restore['aufruf']=(!empty($_POST['aufruf'])) ? $_POST['aufruf'] : 0; $restore['table_ready']=(!empty($_POST['table_ready'])) ? $_POST['table_ready'] : 0; $restore['part']=(isset($_POST['part'])) ? $_POST['part'] : 0; $restore['do_it']=(isset($_POST['do_it'])) ? $_POST['do_it'] : false; $restore['errors']=(isset($_POST['err'])) ? $_POST['err'] : 0; $restore['notices']=(isset($_POST['notices'])) ? $_POST['notices'] : 0; $restore['anzahl_eintraege']=(isset($_POST['anzahl_eintraege'])) ? $_POST['anzahl_eintraege'] : 0; $restore['anzahl_tabellen']=(isset($_POST['anzahl_tabellen'])) ? $_POST['anzahl_tabellen'] : 0; $restore['filename']=(isset($_POST['filename'])) ? urldecode($_POST['filename']) : ''; if (isset($_GET['filename'])) $restore['filename']=urldecode($_GET['filename']); $restore['actual_fieldcount']=(isset($_POST['actual_fieldcount'])) ? $_POST['actual_fieldcount'] : 0; $restore['eintraege_ready']=(isset($_POST['eintraege_ready'])) ? $_POST['eintraege_ready'] : 0; $restore['anzahl_zeilen']=(isset($_POST['anzahl_zeilen'])) ? $_POST['anzahl_zeilen'] : $config['minspeed']; $restore['summe_eintraege']=(isset($_POST['summe_eintraege'])) ? $_POST['summe_eintraege'] : 0; $restore['erweiterte_inserts']=(isset($_POST['erweiterte_inserts'])) ? $_POST['erweiterte_inserts'] : 0; $restore['flag']=(isset($_POST['flag'])) ? $_POST['flag'] : -1; $restore['EOB']=false; $restore['dump_encoding']=(isset($_POST['dump_encoding'])) ? $_POST['dump_encoding'] : 'utf8'; if (isset($_GET['dump_encoding'])) $restore['dump_encoding']=$_GET['dump_encoding']; $restore['compressed']=(substr(strtolower($restore['filename']),-2)=='gz') ? 1 : 0; // wurden nur bestimmte Tabellen ausgwaehlt? if (!isset($databases['db_actual_tableselected'])) $databases['db_actual_tableselected']=''; if ($databases['db_actual_tableselected']!='') { $restore['tables_to_restore']=explode('|',$databases['db_actual_tableselected']); } else $restore['tables_to_restore']=false; $_SESSION['config']=$config; $_SESSION['databases']=$databases; } else { $config=$_SESSION['config']; $databases=$_SESSION['databases']; $restore=$_SESSION['restore']; $restore['startzeit']=time(); // some Server limit the number of vars that can be saved in a session // if this is the case and we lost the language-var we simply include the configuration again // this way the include is skipped on servers with unlimited vars if (!isset($config['language'])) include ('./'.$config['files']['parameter']); } include ('./language/'.$config['language'].'/lang.php'); include ('./language/'.$config['language'].'/lang_restore.php'); $config['files']['iconpath']='./css/'.$config['theme'].'/icons/'; $aus=Array(); $pageheader=MSDheader().headline($lang['L_RESTORE']); $aus1=$page_parameter=''; $RestoreFertig=$eingetragen=$dauer=$filegroesse=0; MSD_mysql_connect($restore['dump_encoding'],true,$restore['actual_table']); @mysqli_select_db($GLOBALS["___mysqli_ston"], $databases['db_actual']) or die($lang['L_DB_SELECT_ERROR'].$databases['db_actual'].$lang['L_DB_SELECT_ERROR2']); // open backup file $restore['filehandle']=($restore['compressed']==1) ? gzopen($config['paths']['backup'].$restore['filename'],'r') : fopen($config['paths']['backup'].$restore['filename'],'r'); if ($restore['filehandle']) { //nur am Anfang Logeintrag if ($restore['offset']==0&&$restore['anzahl_tabellen']==0) { // Statuszeile auslesen $restore['part']=0; $statusline=($restore['compressed']==1) ? gzgets($restore['filehandle']) : fgets($restore['filehandle']); $sline=ReadStatusline($statusline,true); $restore['anzahl_tabellen']=$sline['tables']; $restore['anzahl_eintraege']=$sline['records']; if ($sline['part']!='MP_0') $restore['part']=1; //substr($sline['part'],3); if ($config['empty_db_before_restore']==1) EmptyDB($databases['db_actual']); $restore['tablelock']=0; $restore['erweiterte_inserts']=0; if ($sline['tables']=='-1') ($restore['compressed']) ? gzseek($restore['filehandle'],0) : fseek($restore['filehandle'],0); if ($restore['part']>0) WriteLog('Start Multipart-Restore \''.$restore['filename'].'\''); else WriteLog('Start Restore \''.$restore['filename'].'\''); } else { if ($restore['compressed']==0) $filegroesse=filesize($config['paths']['backup'].$restore['filename']); // Dateizeiger an die richtige Stelle setzen ($restore['compressed']) ? gzseek($restore['filehandle'],$restore['offset']) : fseek($restore['filehandle'],$restore['offset']); // Jetzt basteln wir uns mal unsere Befehle zusammen... $a=0; $dauer=0; $restore['EOB']=false; // Disable Keys of actual table to speed up restoring if (is_array($restore['tables_to_restore'])&&sizeof($restore['tables_to_restore'])>0&&in_array($restore['actual_table'],$restore['tables_to_restore'])) { @mysqli_query($config['dbconnection'], '/*!40000 ALTER TABLE `'.$restore['actual_table'].'` DISABLE KEYS */;'); } elseif ((!is_array($restore['tables_to_restore'])||sizeof($restore['tables_to_restore'])==0)&&($restore['actual_table']>''&&$restore['actual_table']!='unbekannt')) @mysqli_query($config['dbconnection'], '/*!40000 ALTER TABLE `'.$restore['actual_table'].'` DISABLE KEYS */;'); WHILE (($a<$restore['anzahl_zeilen'])&&(!$restore['fileEOF'])&&($dauer<$restore['max_zeit'])&&!$restore['EOB']) { $sql_command=get_sqlbefehl(); if ($sql_command>'') { //WriteLog(htmlspecialchars($sql_command)); $res=mysqli_query($config['dbconnection'], $sql_command); if (!$res===false) { $anzsql=mysqli_affected_rows($config['dbconnection']); // Anzahl der eingetragenen Datensaetze ermitteln (Indexaktionen nicht zaehlen) $command=strtoupper(substr($sql_command,0,7)); if ($command=='INSERT ') { $anzsql=mysqli_affected_rows($config['dbconnection']); if ($anzsql>0) $restore['eintraege_ready']+=$anzsql; } } else { // Bei MySQL-Fehlern sofort abbrechen und Info ausgeben $meldung=@((is_object($config['dbconnection'])) ? mysqli_error($config['dbconnection']) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)); if ($meldung!='') { if (strtolower(substr($meldung,0,15))=='duplicate entry') { ErrorLog('RESTORE',$databases['db_actual'],$sql_command,$meldung,1); $restore['notices']++; } else { if ($config['stop_with_error']==0) { Errorlog('RESTORE',$databases['db_actual'],$sql_command,$meldung); $restore['errors']++; } else { Errorlog('RESTORE',$databases['db_actual'],$sql_command,'Restore failed: '.$meldung,0); SQLError($sql_command,$meldung); die($sql_command.' -> '.$meldung); } } } } } $a++; $dauer=time()-$restore['startzeit']; } $eingetragen=$a-1; } $restore['offset']=($restore['compressed']) ? gztell($restore['filehandle']) : ftell($restore['filehandle']); $restore['compressed'] ? gzclose($restore['filehandle']) : fclose($restore['filehandle']); $restore['aufruf']++; if (!$restore['compressed']) $prozent=($filegroesse>0) ? ($restore['offset']*100)/$filegroesse : 0; else { if ($restore['anzahl_eintraege']>0) $prozent=$restore['eintraege_ready']*100/$restore['anzahl_eintraege']; else $prozent=0; } if ($prozent>100) $prozent=100; if ($aus1!='') $aus[]='
'.$aus1.'

'; $aus[]=sprintf($lang['L_RESTORE_DB'],$databases['db_actual'],$config['dbhost']).'
'.$lang['L_FILE'].': '.$restore['filename'].'
'.$lang['L_CHARSET'].': '.$restore['dump_encoding'].'
'; if ($restore['part']>0) $aus[]='
Multipart File '.$restore['part'].'
'; $tabellen_fertig=($restore['table_ready']>0) ? $restore['table_ready'] : '0'; $to_do=($restore['anzahl_tabellen']>0) ? $restore['anzahl_tabellen'] : $lang['L_UNKNOWN']; if ($restore['anzahl_tabellen']>0) $aus[]=sprintf($lang['L_RESTORE_TABLES_COMPLETED'],$tabellen_fertig,$to_do); else $aus[]=sprintf($lang['L_RESTORE_TABLES_COMPLETED0'],$tabellen_fertig); $done=number_format($restore['eintraege_ready'],0,',','.'); $to_do=number_format($restore['anzahl_eintraege'],0,',','.'); if ($restore['anzahl_eintraege']>0) $aus[]=sprintf($lang['L_RESTORE_RUN1'],$done,$to_do); else $aus[]=sprintf($lang['L_RESTORE_RUN0'],$done); $aus[]=sprintf($lang['L_RESTORE_RUN2'],$restore['actual_table']).$lang['L_PROGRESS_OVER_ALL'].'
'; //Fortschrittsbalken $prozentbalken=(round($prozent,0)*3); if ($restore['anzahl_eintraege']>0&&$restore['tables_to_restore']===false) { $aus[]=''; if ($prozentbalken>=3) $aus[]=''.''.'
 '.(number_format($prozent,2,",",".")).' %
'; } else $aus[]=' '.$lang['L_UNKNOWN_NUMBER_OF_RECORDS'].'

'; //Speed-Anzeige $fw=($config['maxspeed']==$config['minspeed']) ? 300 : round(($restore['anzahl_zeilen']-$config['minspeed'])/($config['maxspeed']-$config['minspeed'])*300,0); $aus[]='
'.'
'.'Speed
'.$restore['anzahl_zeilen'].'
'.''.'
'.''.'
'.''.''.'
'.$config['minspeed'].''.$config['maxspeed'].'
'; //Status-Text $aus[]='

'.zeit_format(time()-$restore['xtime']).', '.$restore['aufruf'].' '.$lang['L_PAGE_REFRESHS'].(($restore['part']>0) ? ', file '.$restore['part'] : '').(($restore['errors']>0) ? ', '.$restore['errors'].' errors' : '').(($restore['notices']>0) ? ', '.$restore['notices'].' notices' : '').'

'; $restore['summe_eintraege']+=$eingetragen; //Zeitanpassung if ($dauer<$restore['max_zeit']) { $restore['anzahl_zeilen']=$restore['anzahl_zeilen']*$config['tuning_add']; // wenn wir mehr als die Haelfte der Zeit noch haetten nutzen koennen: Anzahl direkt um fast das Doppelte erhoehen if ($dauer<$restore['max_zeit']/2) $restore['anzahl_zeilen']=$restore['anzahl_zeilen']*1.8; if ($restore['anzahl_zeilen']>$config['maxspeed']) $restore['anzahl_zeilen']=$config['maxspeed']; } else { $restore['anzahl_zeilen']=$restore['anzahl_zeilen']*$config['tuning_sub']; if ($restore['anzahl_zeilen']<$config['minspeed']) $restore['anzahl_zeilen']=$config['minspeed']; } $restore['anzahl_zeilen']=intval($restore['anzahl_zeilen']); if ($restore['fileEOF']&&$restore['part']==0) $restore['EOB']=true; if ($restore['EOB']) { // Uff, geschafft! Jetzt darf die Leitung wieder abkuehlen. :-) unset($aus); $aus=array(); $restore['xtime']=time()-$restore['xtime']; WriteLog("Restore '".$restore['filename']."' finished in ".zeit_format($restore['xtime'])."."); $aus[]=$lang['L_RESTORE_TOTAL_COMPLETE']."
"; $aus[]=$lang['L_FILE'].': '.$restore['filename'].'

'; $aus[]=sprintf($lang['L_RESTORE_COMPLETE'],$restore['table_ready']).'
'; $aus[]=sprintf($lang['L_RESTORE_COMPLETE2'],number_format($restore['eintraege_ready'],0,",",".")); $aus[]='

'.zeit_format($restore['xtime']).', '.$restore['aufruf'].' '.$lang['L_PAGE_REFRESHS'].'

'; if ($restore['errors']>0) $aus[]=$lang['L_ERRORS'].': '.$restore['errors'].' » '.$lang['L_VIEW'].'
'; if ($restore['notices']>0) $aus[]=$lang['L_NOTICES'].': '.$restore['notices'].' » '.$lang['L_VIEW'].'
'; $aus[]="
   "; $aus[]="   "; $RestoreFertig=1; } else { if ($restore['fileEOF']) { //Multipart-Restore $restore['fileEOF']=false; $nextfile=NextPart($restore['filename'],0,true); if (!file_exists($config['paths']['backup'].$nextfile)) { $done=number_format($restore['eintraege_ready'],0,",","."); $to_do=number_format($restore['anzahl_eintraege'],0,",","."); $aus=array(); $aus[]='

'.$lang['L_RESTORE'].'

'; $aus[]=sprintf($lang['L_RESTORE_DB'],$databases['db_actual'],$config['dbhost']); $aus[]='

'.$lang['L_MULTI_PART'].': '.$lang['L_FILE_MISSING'].' \''.$nextfile.'\' !

'; $aus[]=sprintf($lang['L_RESTORE_RUN1'],$done,$to_do); $aus[]=sprintf($lang['L_RESTORE_RUN2'],$restore['actual_table']); $aus[]='

'.zeit_format(time()-$restore['xtime']).', '.$restore['aufruf'].' '.$lang['L_PAGE_REFRESHS']; $aus[]=($restore['part']>0) ? ', '.$lang['L_FILE'].' '.$restore['part'] : ''; $aus[]=($restore['errors']>0) ? ', '.$restore['errors'].' errors' : ''; $aus[]='

'; WriteLog('Restore unsuccessful: Cannot find Multipartfile \''.$nextfile.'\''); $RestoreFertig=1; } else { $restore['filename']=$nextfile; $restore['offset']=0; $restore['part']++; WriteLog("Continue Multipart-Restore with File '".$restore['filename']."'"); } } } } else $aus[]=$config['paths']['backup'].$restore['filename'].' : '.$lang['L_FILE_OPEN_ERROR']; $pagefooter=($RestoreFertig==1) ? MSDFooter() : ''; // formerly all parameters were submitted via POST; now we use a session but we need the form to do the js-selfcall $page_parameter='
'; if ($RestoreFertig==1) { $complete_page=$pageheader.(($aus!='') ? implode("\n",$aus) : '').$pagefooter; } else { $aus[]=$page_parameter; $_SESSION['restore']=$restore; $selbstaufruf=''; $complete_page=$pageheader.(($aus!='') ? implode("\n",$aus) : '').$selbstaufruf.$pagefooter; } echo $complete_page; ob_end_flush(); ?>