0)) ? $config['minspeed'] : 50); $dump['dump_encoding'] = (isset($_POST['dump_encoding'])) ? urldecode($_POST['dump_encoding']) : ''; if (isset($_GET['sel_dump_encoding'])) { // First call -> evaluate encoding include_once './inc/functions_sql.php'; get_sql_encodings(); $encodingline = $config['mysql_possible_character_sets'][$_GET['sel_dump_encoding']]; $encoding = explode(' ', $encodingline); $dump['dump_encoding'] = isset($encoding[0]) ? $encoding[0] : $encodingline; } include './inc/define_icons.php'; $dump['tabellen_gesamt'] = 0; } $mp2 = [ 'Bytes', 'Kilobytes', 'Megabytes', 'Gigabytes', ]; FillMultiDBarrays(); if ('' != $databases['db_actual_tableselected'] && 0 == $config['multi_dump']) { $dump['tblArray'] = explode('|', $databases['db_actual_tableselected']); $tbl_sel = true; $msgTbl = sprintf($lang['L_NR_TABLES_SELECTED'], count($dump['tblArray'])); } // Correction -> Multi-DB-array is filled (so that the info is not lost in the config), but multidump is not activated) if (isset($config['multi_dump']) && (0 == $config['multi_dump'])) { unset($databases['multi']); $databases['multi'] = []; $databases['multi'][0] = $databases['db_actual']; } else { // if multidump is activated, but no DB is selected -> take over current DB if (!isset($databases['multi'][0])) { $databases['multi'][0] = $databases['db_actual']; } // find correct dbindex -> take dbname from $databases['multi'] and get the correct index // from $databases['Name'] -> needed to set $dump['dbindex'] for first run of command_before_dump $dump['dbindex'] = $flipped[$databases['multi'][0]]; } // Activate time counter $dump['max_zeit'] = intval($config['max_execution_time'] * $config['time_buffer']); $dump['startzeit'] = time(); $xtime = (isset($_POST['xtime'])) ? $_POST['xtime'] : time(); $dump['countdata'] = (!empty($_POST['countdata'])) ? $_POST['countdata'] : 0; $dump['aufruf'] = (!empty($_POST['aufruf'])) ? $_POST['aufruf'] : 0; mod_mysqli_connect($dump['dump_encoding']); if (-1 == $dump['table_offset']) { ExecuteCommand('b'); } // only read tableinfos the first time and save it to session to speed up backing up process if (!isset($_SESSION['dump'])) { getDBInfos(); } $num_tables = count($dump['tables']); if ((isset($config['optimize_tables_beforedump']) && (1 == $config['optimize_tables_beforedump'])) && -1 == $dump['table_offset']) { $out .= sprintf($lang['L_NR_TABLES_OPTIMIZED'], $num_tables).'
'; } $dump['data'] = ''; $dump['dbindex'] = (isset($_POST['dbindex'])) ? $_POST['dbindex'] : $flipped[$databases['multi'][0]]; // Build output header $aus_header[] = headline('Backup: '.((isset($config['multi_dump']) && (1 == $config['multi_dump'])) ? 'Multidump ('.count($databases['multi']).' '.$lang['L_DBS'].')' : $lang['L_DB'].': '.$databases['Name'][$dump['dbindex']].(('' != $databases['praefix'][$dump['dbindex']]) ? ' ('.$lang['L_WITHPRAEFIX'].' '.$databases['praefix'][$dump['dbindex']].')' : ''))); if (isset($aus_error) && count($aus_error) > 0) { $aus_header = array_merge($aus_header, $aus_error); } if (0 == $num_tables) { // no tables found $aus[] = '

'.$lang['L_ERROR'].': '.sprintf($lang['L_DUMP_NOTABLES'], $databases['Name'][$dump['dbindex']]).'

'; if (1 == !$config['multi_dump']) { echo $pageheader; echo get_page_parameter($dump); echo implode("\n", $aus); echo ''; exit(); } } else { if (-1 == $dump['table_offset']) { // Create file, since first call new_file(); $dump['table_offset'] = 0; // now it can start flush(); } else { // Determine SQL commands $dump['restzeilen'] = $dump['anzahl_zeilen']; while (($dump['table_offset'] < $num_tables) && ($dump['restzeilen'] > 0)) { $table = substr($dump['tables'][$dump['table_offset']], strpos($dump['tables'][$dump['table_offset']], '|') + 1); $adbname = substr($dump['tables'][$dump['table_offset']], 0, strpos($dump['tables'][$dump['table_offset']], '|')); if ($databases['Name'][$dump['dbindex']] != $adbname) { //neue Datenbank $dump['data'] .= "\nSET FOREIGN_KEY_CHECKS=1;"; $dump['data'] .= "\n".$mysql_commentstring.' EOB'."\n\n"; WriteToDumpFile(); WriteLog('Dump \''.$dump['backupdatei'].'\' finished.'); ExecuteCommand('a'); if (1 == $config['multi_part']) { $out .= $lang['L_FINISHED'].'
'; $dateistamm = substr($dump['backupdatei'], 0, strrpos($dump['backupdatei'], 'part_')).'part_'; $dateiendung = (1 == $config['compression']) ? '.sql.gz' : '.sql'; for ($i = 1; $i < ($dump['part'] - $dump['part_offset']); ++$i) { $mpdatei = $dateistamm.$i.$dateiendung; clearstatcache(); $sz = byte_output(@filesize($config['paths']['backup'].$mpdatei)); $out .= $lang['L_FILE'].' '.$mpdatei.' ('.$sz.') '.$lang['L_DUMP_SUCCESSFUL'].'
'; } } else { clearstatcache(); $out .= $lang['L_FINISHED'].'
'.$dump['backupdatei'].' ('.byte_output(filesize($config['paths']['backup'].$dump['backupdatei'])).')
'; } if (1 == $config['send_mail']) { DoEmail(); } for ($i = 0; $i < 3; ++$i) { if (isset($config['ftp_transfer'][$i]) && (1 == $config['ftp_transfer'][$i])) { DoFTP($i); } if (isset($config['sftp_transfer'][$i]) && (1 == $config['sftp_transfer'][$i])) { DoSFTP($i); } } if (isset($flipped[$adbname])) { $dump['dbindex'] = $flipped[$adbname]; } $dump['part_offset'] = $dump['part'] - 1; $out .= '

'; ExecuteCommand('b'); new_file(); } $aktuelle_tabelle = $dump['table_offset']; if (0 == $dump['zeilen_offset']) { if (isset($config['minspeed']) && ($config['minspeed'] > 0)) { $dump['anzahl_zeilen'] = $config['minspeed']; $dump['restzeilen'] = $config['minspeed']; } $create_statement = ''; $create_statement = get_def($adbname, $table); if (!(false === $create_statement)) { $dump['data'] .= $create_statement; } else { WriteToDumpFile(); // save data we have up to now // error reading table definition $read_create_error = sprintf($lang['L_FATAL_ERROR_DUMP'], $table, $adbname).': '.mysqli_error($config['dbconnection']); Errorlog('DUMP', $databases['db_actual'], '', $read_create_error, 0); WriteLog($read_create_error); if ($config['stop_with_error'] > 0) { exit($read_create_error); } ++$dump['errors']; } } WriteToDumpFile(); if (!in_array($adbname.'|'.$table, $dump['skip_data']) && 'VIEW' != $dump['table_types'][getDBIndex($adbname, $table)]) { get_content($adbname, $table); --$dump['restzeilen']; } else { // skip data if ('VIEW' != $dump['table_types'][getDBIndex($adbname, $table)]) { $dump['data'] .= '/*!40000 ALTER TABLE `'.$table.'` ENABLE KEYS */;'."\n"; } WriteToDumpFile(); ++$dump['table_offset']; } if ((isset($config['memory_limit']) && $config['memory_limit'] > 0) && strlen($dump['data']) > $config['memory_limit']) { WriteToDumpFile(); } } } /* * Display - Progress */ if (isset($config['multi_dump']) && (1 == $config['multi_dump'])) { $mudbs = ''; $count_dbs = count($databases['multi']); for ($i = 0; $i < $count_dbs; ++$i) { if ($databases['Name'][$dump['dbindex']] == $databases['multi'][$i]) { $mudbs .= ''.$databases['multi'][$i].'   '; } else { $mudbs .= ''.$databases['multi'][$i].'   '; } } } if (isset($config['multi_part']) && (1 == $config['multi_part'])) { $aus[] = '
Multipart-Backup: '.$config['multipartgroesse1'].' '.$mp2[$config['multipartgroesse2']].'
'; } $aus[] = '

'.$lang['L_DUMP_HEADLINE'].'

'; if ($dump['kommentar'] > '') { $aus[] = $lang['L_COMMENT'].': '.$dump['kommentar'].'
'; } $aus[] = ((isset($config['multi_dump']) && 1 == $config['multi_dump'])) ? $lang['L_DB'].': '.$mudbs : $lang['L_DB'].': '.$databases['Name'][$dump['dbindex']].''; $aus[] = (('' != $databases['praefix'][$dump['dbindex']]) ? ' ('.$lang['L_WITHPRAEFIX'].' '.$databases['praefix'][$dump['dbindex']].')' : '').'
'; if (isset($tbl_sel)) { $aus[] = $msgTbl.'

'; } if (isset($config['multi_part']) && (1 == $config['multi_part'])) { $aus[] = 'Multipart-Backup File '.($dump['part'] - $dump['part_offset'] - 1).'
'; $aus2 = ', '.($dump['part'] - 1).' files'; } $aus[] = $lang['L_DUMP_FILENAME'].''.$dump['backupdatei'].'
'.$lang['L_CHARSET'].': '.$dump['dump_encoding'].''. '
'.$lang['L_FILESIZE'].': '.byte_output($dump['filesize']).'

'.$lang['L_GZIP_COMPRESSION'].' '; $aus[] = (isset($config['compression']) && (1 == $config['compression'])) ? $lang['L_ACTIVATED'] : $lang['L_NOT_ACTIVATED']; $aus[] = '.
'; if ($out > '') { $aus[] = '
'.$out.''; } if (isset($dump['tables'][$dump['table_offset']])) { $table = substr($dump['tables'][$dump['table_offset']], strpos($dump['tables'][$dump['table_offset']], '|') + 1); $adbname = substr($dump['tables'][$dump['table_offset']], 0, strpos($dump['tables'][$dump['table_offset']], '|')); // get nr of recorsd from dump-array $record_string = $dump['records'][$dump['table_offset']]; $record_string = explode('|', $record_string); $dump['zeilen_total'] = $record_string[1]; if ($dump['zeilen_total'] > 0) { $fortschritt = intval((100 * $dump['zeilen_offset']) / $dump['zeilen_total']); } else { $fortschritt = 100; } $aus[] = $lang['L_SAVING_TABLE'].''.($dump['table_offset'] + 1).' '.$lang['L_OF'].' '.sizeof($dump['tables']).'
'.$lang['L_ACTUAL_TABLE'].': '.$table.'

'.$lang['L_PROGRESS_TABLE'].':
'; $aus[] = ''.''.''.''; if ($dump['anzahl_zeilen'] + $dump['zeilen_offset'] >= $dump['zeilen_total']) { $eintrag = $dump['zeilen_offset'] + 1; $zeilen_gesamt = $dump['zeilen_total']; if (0 == $zeilen_gesamt) { $eintrag = 0; } } else { $zeilen_gesamt = $dump['zeilen_offset'] + $dump['anzahl_zeilen']; $eintrag = $dump['zeilen_offset'] + 1; } $aus[] = ''.'
 '.($fortschritt).'%
'.$lang['L_ENTRY'].' '.number_format($eintrag, 0, ',', '.').' '.$lang['L_UPTO'].' '.number_format(($zeilen_gesamt), 0, ',', '.').' '.$lang['L_OF'].' '.number_format($dump['zeilen_total'], 0, ',', '.').'
'; $dump['tabellen_gesamt'] = (isset($dump['tables'])) ? count($dump['tables']) : 0; $noch_zu_speichern = $dump['totalrecords'] - $dump['countdata']; $prozent = ($dump['totalrecords'] > 0) ? round(((100 * $noch_zu_speichern) / $dump['totalrecords']), 0) : 100; if (0 == $noch_zu_speichern || $prozent > 100) { $prozent = 100; } $aus[] = "\n".'
'.$lang['L_PROGRESS_OVER_ALL'].':'."\n".''.''.''.'
'.(100 - $prozent).'%
'; //Speed-Anzeige $config['maxspeed'] = isset($config['maxspeed']) ? $config['maxspeed'] : '1'; $config['minspeed'] = isset($config['minspeed']) ? $config['minspeed'] : '1'; $fw = ($config['maxspeed'] == $config['minspeed']) ? 300 : round(($dump['anzahl_zeilen'] - $config['minspeed']) / ($config['maxspeed'] - $config['minspeed']) * 300, 0); if ($fw > 300) { $fw = 300; } $aus[] = '
'.'
'.'Speed
'.$dump['anzahl_zeilen'].'
'.''.'
'.''.'
'.''.''.'
'.$config['minspeed'].''.$config['maxspeed'].'
'."\n".'
'. //Status-Text '

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

'; } else { ++$dump['table_offset']; } // End display WriteToDumpFile(); if (!isset($summe_eintraege)) { $summe_eintraege = 0; } if ($dump['table_offset'] <= $dump['tabellen_gesamt']) { $dauer = time() - ($xtime + $dump['verbraucht']); $dump['verbraucht'] += $dauer; $summe_eintraege += $dump['anzahl_zeilen']; // Time adjustment if ($dauer < $dump['max_zeit']) { $dump['anzahl_zeilen'] = $dump['anzahl_zeilen'] * $config['tuning_add']; if ($dauer < $dump['max_zeit'] / 2) { $dump['anzahl_zeilen'] *= 1.8; } if ($dump['anzahl_zeilen'] > $config['maxspeed']) { $dump['anzahl_zeilen'] = $config['maxspeed']; } } else { $dump['anzahl_zeilen'] = $dump['anzahl_zeilen'] * $config['tuning_sub']; if ($dump['anzahl_zeilen'] < $config['minspeed']) { $dump['anzahl_zeilen'] = $config['minspeed']; } } $dump['anzahl_zeilen'] = intval($dump['anzahl_zeilen']); ++$dump['aufruf']; } else { // Backup ready $dump['data'] = "\nSET FOREIGN_KEY_CHECKS=1;"; $dump['data'] .= "\n".$mysql_commentstring.' EOB'."\n\n"; WriteToDumpFile(); ExecuteCommand('a'); chmod($config['paths']['backup'].$dump['backupdatei'], 0777); if (isset($config['multi_part']) && (1 == $config['multi_part'])) { $out .= "\n".'
'; $dateistamm = substr($dump['backupdatei'], 0, strrpos($dump['backupdatei'], 'part_')).'part_'; $dateiendung = (1 == $config['compression']) ? '.sql.gz' : '.sql'; clearstatcache(); for ($i = 1; $i < ($dump['part'] - $dump['part_offset']); ++$i) { $mpdatei = $dateistamm.$i.$dateiendung; $sz = byte_output(@filesize($config['paths']['backup'].$mpdatei)); $out .= "\n".$lang['L_FILE'].' '.$mpdatei.' ('.$sz.') '.$lang['L_DUMP_SUCCESSFUL'].'
'; } } else { $out .= "\n".'
'.$lang['L_FILE'].' '.$dump['backupdatei'].' ('.byte_output(filesize($config['paths']['backup'].$dump['backupdatei'])).')'.''.$lang['L_DUMP_SUCCESSFUL'].'
'; } $xtime = time() - $xtime; $aus = []; $aus[] = '
'."\n"; if (isset($config['multi_dump']) && (1 == $config['multi_dump'])) { WriteLog('Dump \''.$dump['backupdatei'].'\' finished.'); WriteLog('Multidump: '.count($databases['multi']).' Databases in '.zeit_format($xtime).'.'); } else { WriteLog('Dump \''.$dump['backupdatei'].'\' finished in '.zeit_format($xtime).'.'); } if (isset($config['send_mail']) && (1 == $config['send_mail'])) { DoEmail(); } for ($i = 0; $i < 3; ++$i) { if (isset($config['ftp_transfer'][$i]) && (1 == $config['ftp_transfer'][$i])) { DoFTP($i); } if (isset($config['sftp_transfer'][$i]) && (1 == $config['sftp_transfer'][$i])) { DoSFTP($i); } } $aus[] = ''.$lang['L_DONE'].'
'; if (isset($config['multi_dump']) && (1 == $config['multi_dump'])) { $aus[] = sprintf($lang['L_MULTIDUMP'], count($databases['multi'])).': '; $aus[] = ''.implode(', ', $databases['multi']).''; $aus2 = ''; $out = ''; } else { $aus[] = '
'.sprintf($lang['L_DUMP_ENDERGEBNIS'], $num_tables, number_format($dump['countdata'], 0, ',', '.')); } if ($dump['errors'] > 0) { $aus[] = sprintf($lang['L_DUMP_ERRORS'], $dump['errors']); } $aus[] = '
'.$out.'
'.'

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

'."\n"; $aus[] = "\n".'
'; $aus[] = '   '; $aus[] = '   

'; $aus[] = '
'; $DumpFertig = 1; } } //===================================================================== //================= Display =========================================== //===================================================================== // Craft page $aus = array_merge($aus_header, $aus); $dump['xtime'] = $xtime; if (1 != $DumpFertig) { // save actual values to session $_SESSION['dump'] = $dump; $page_parameter = get_page_parameter($dump); $pagefooter = ''; $selbstaufruf = $page_parameter.'
'; } else { $dump = []; $_SESSION['dump'] = $dump; $pagefooter = MODFooter('', 1); $selbstaufruf = ''; } $complete_page = $pageheader.implode("\n", $aus)."\n".$selbstaufruf."\n".$pagefooter; echo $complete_page; ob_end_flush();