$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; } } } if (isset($_GET['filename'])) { 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']=( isset($_POST['EOB']) ) ? $_POST['EOB'] : 0; $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(); } include ( './language/' . $config['language'] . '/lang.php' ); include ( './language/' . $config['language'] . '/lang_restore.php' ); ob_start(); $aus=Array(); $pageheader=MSDheader() . headline($lang['restore']); $aus1=$page_parameter=''; $RestoreFertig=$eingetragen=$dauer=$filegroesse=0; MSD_mysql_connect($restore['dump_encoding'],true,$restore['actual_table']); @mysql_select_db($databases['db_actual']) or die($lang['db_select_error'] . $databases['db_actual'] . $lang['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 spped up restoring if ($restore['actual_table'] > '') @mysql_query('/*!40000 ALTER TABLE `' . $restore['actual_table'] . '` DISABLE KEYS */;',$config['dbconnection']); 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=mysql_query($sql_command,$config['dbconnection']); if (!$res === false) { $anzsql=mysql_affected_rows($config['dbconnection']); // Anzahl der eingetragenen Datensaetze ermitteln (Indexaktionen nicht zaehlen) $command=strtoupper(substr($sql_command,0,7)); if ($command == 'INSERT ') { $anzsql=mysql_affected_rows($config['dbconnection']); if ($anzsql > 0) $restore['eintraege_ready']+=$anzsql; } } else { // Bei MySQL-Fehlern sofort abbrechen und Info ausgeben $meldung=@mysql_error($config['dbconnection']); 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['restore_db'],$databases['db_actual'],$config['dbhost']) . '
' . $lang['file'] . ': ' . $restore['filename'] . '
' . $lang['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['unknown']; if ($restore['anzahl_tabellen'] > 0) $aus[]=sprintf($lang['restore_tables_completed'],$tabellen_fertig,$to_do); else $aus[]=sprintf($lang['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['restore_run1'],$done,$to_do); else $aus[]=sprintf($lang['restore_run0'],$done); $aus[]=sprintf($lang['restore_run2'],$restore['actual_table']) . $lang['progress_over_all'] . '
'; //Fortschrittsbalken $prozentbalken=( round($prozent,0) * 3 ); //v($restore);die(); if ($restore['anzahl_eintraege'] > 0 && $restore['tables_to_restore'] === false) { $aus[]=''; if ($prozentbalken >= 3) $aus[]='' . '' . '
 ' . ( number_format($prozent,2,",",".") ) . ' %
'; } else $aus[]=' ' . $lang['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'] . ' pages' . ( ( $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['restore_total_complete'] . "
"; $aus[]=$lang['file'] . ': ' . $restore['filename'] . '

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

' . zeit_format($restore['xtime']) . ", " . $restore['aufruf'] . " pages

"; if ($restore['errors'] > 0) $aus[]=$lang['errors'] . ': ' . $restore['errors'] . ' » ' . $lang['view'] . '
'; if ($restore['notices'] > 0) $aus[]=$lang['notices'] . ': ' . $restore['notices'] . ' » ' . $lang['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['restore'] . '

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

' . $lang['multi_part'] . ': ' . $lang['file_missing'] . ' \'' . $nextfile . '\' !

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

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

' . ( ( isset($restore['EOB']) ) ? "EOB" : "" ); 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['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(); ?>