$fItem) {
$between = explode(strtolower($fItem), strtolower($string));
$pos = 0;
foreach ($between as $bKey => $bItem) {
$between[$bKey] = substr($string, $pos, strlen($bItem));
$pos += strlen($bItem) + strlen($fItem);
}
$string = implode($replace[$fKey], $between);
}
return $string;
}
}
if (!function_exists('stripos')) { // borrowed from php.net comments
function stripos($haystack, $needle)
{
return strpos($haystack, stristr($haystack, $needle));
}
}
function Help($ToolTip, $Anker, $imgsize = 12)
{/*
global $config;
if($Anker!=""){
return '';
} else {
return '
';
}
*/
}
function DeleteFilesM($dir, $pattern = '*.*')
{
$deleted = [];
$pattern = str_replace([
"\*",
"\?",
], [
'.*',
'.',
], preg_quote($pattern));
if ('/' != substr($dir, -1)) {
$dir .= '/';
}
if (is_dir($dir)) {
$d = dir($dir);
while ($file = $d->read()) {
if (is_file($dir.$file) && preg_match('/^'.$pattern.'$/', $file)) {
if (unlink($dir.$file)) {
$deleted[$file] = true;
} else {
$deleted[$file] = false;
}
}
}
$d->close();
return $deleted;
}
}
function SetDefault($load_default = false)
{
global $config, $databases, $nl, $out, $lang, $preConfig;
if (true == $load_default) {
if (file_exists($config['files']['parameter']) && (is_readable($config['files']['parameter']))) {
include $config['files']['parameter'];
} // alte Config lesen
}
$restore_values = [];
$restore_values['cron_dbindex'] = isset($config['cron_dbindex']) ? $config['cron_dbindex'] : -3;
$restore_values['cron_dbpraefix_array'] = isset($config['cron_dbpraefix_array']) ? $config['cron_dbpraefix_array'] : '';
if ($restore_values['cron_dbindex'] >= 0 && isset($databases['Name'][$config['cron_dbindex']])) { // eine bestimmte Db gewaehlt?
// Ja, Namen merken, um spaeter den Index wieder herzustellen
$restore_values['db_actual_cron'] = $databases['Name'][$config['cron_dbindex']];
}
$restore_values['db_actual'] = isset($databases['db_actual']) ? $databases['db_actual'] : '';
$old_lang = isset($config['language']) && in_array($config['language'], $lang['languages']) ? $config['language'] : '';
if (true == $load_default) {
if (file_exists($config['files']['parameter'])) {
@unlink($config['files']['parameter']);
}
include './config.php';
if (is_array($preConfig)) {
foreach ($preConfig as $key => $val) {
$config[$key] = $val;
}
}
if ('' != $old_lang) {
$config['language'] = $old_lang;
}
include './language/'.$config['language'].'/lang.php';
}
$oldVals = [];
// Zuordnung nach Namen der Db zwischenspeichern, um Eingaben nicht zu verlieren
if (isset($databases) && isset($databases['Name'])) {
foreach ($databases['Name'] as $k => $v) {
if (!isset($oldVals[$k])) {
$oldVals[$v] = [];
}
$oldVals[$v]['praefix'] = $databases['praefix'][$k];
$oldVals[$v]['command_before_dump'] = $databases['command_before_dump'][$k];
$oldVals[$v]['command_after_dump'] = $databases['command_after_dump'][$k];
}
}
$oldDbArray = [];
if (isset($databases['Name'])) {
$oldDbArray = $databases['Name'];
}
$databases['Name'] = [];
$found_dbs = [];
//DB-Liste holen
mod_mysqli_connect();
$create_statement = 'CREATE TABLE `myoosdumper_test_abcxyvfgh` (`test` varchar(200) default NULL, `id` bigint(20) unsigned NOT NULL auto_increment,'.'PRIMARY KEY (`id`)) TYPE=MyISAM;';
$res = mysqli_query($config['dbconnection'], 'SHOW DATABASES');
while ($row = mysqli_fetch_row($res)) {
$found_dbs[] = $row[0];
}
$found_dbs = array_merge($oldDbArray, $found_dbs);
$found_dbs = array_unique($found_dbs);
sort($found_dbs);
// now check each db
$a = 0;
for ($i = 0; $i < count($found_dbs); ++$i) {
$found_db = $found_dbs[$i];
// Testverbindung - Tabelle erstellen, nachschauen, ob es geklappt hat und dann wieder löschen
$use = mysqli_select_db($config['dbconnection'], $found_db);
if ($use) {
/*
Undefined variable: $old_db
if (isset($old_db) && $found_db == $old_db) {
$databases['db_selected_index'] = $a;
}
*/
$databases['Name'][$a] = $found_db;
$databases['praefix'][$a] = '';
$databases['command_before_dump'][$a] = '';
$databases['command_after_dump'][$a] = '';
if (isset($oldVals[$found_db])) {
$databases['praefix'][$a] = $oldVals[$found_db]['praefix'];
$databases['command_before_dump'][$a] = $oldVals[$found_db]['command_before_dump'];
$databases['command_after_dump'][$a] = $oldVals[$found_db]['command_after_dump'];
}
$out .= $lang['L_SAVING_DB_FORM'].' '.$found_db.' '.$lang['L_ADDED']."$nl";
++$a;
}
}
if (!isset($databases['db_selected_index'])) {
$databases['db_selected_index'] = 0;
$databases['db_actual'] = $databases['Name'][0];
}
WriteParams(1, $restore_values);
if (true === $load_default) {
WriteLog('default settings loaded.');
}
return $out;
}
function WriteParams($as = 0, $restore_values = false)
{
// wenn $as=1 wird versucht den aktuellen Index der Datenbank nach dem Einlesen wieder zu ermitteln
// auch wenn sich die Indexnummer durch Loeschaktionen geaendert hat
global $config, $databases, $config_dontsave;
$nl = "\n";
// alte Werte retten
if ($as) {
if (is_array($restore_values)) {
if ($restore_values['cron_dbindex'] < 0) {
// Multidump oder "alle Datenbanken" war gewaehlt
$config['cron_dbindex'] = $restore_values['cron_dbindex'];
} else {
//den Index der konkreten Datenbank aus der alten Konfiguration ermitteln
$db_names = [];
$db_names = array_flip($databases['Name']);
if (isset($db_names[$restore_values['db_actual']])) {
// alte Db existiert noch -> Index uebernehmen
$databases['db_actual'] = $restore_values['db_actual'];
} else {
$databases['db_actual'] = $databases['Name'][0];
}
//Cron-Index wiederfinden
if (isset($db_names[$restore_values['cron_dbindex']])) {
$config['cron_dbindex'] = $db_names[$restore_values['cron_dbindex']];
} else {
// DB wurde zwischenzeitlich geloescht - sicherheitshalber alle DBs sichern
$databases['cron_dbindex'] = -3;
}
}
}
}
FillMultiDBArrays();
//Parameter zusammensetzen
$config['multipartgroesse1'] = isset($config['multipartgroesse1']) ? $config['multipartgroesse1'] : 1;
$config['multipartgroesse2'] = isset($config['multipartgroesse2']) ? $config['multipartgroesse2'] : 1;
$config['multipart_groesse'] = $config['multipartgroesse1'] * ((1 == $config['multipartgroesse2']) ? 1024 : 1024 * 1024);
$param = $pars_all = ' $val) {
if (!in_array($var, $config_dontsave)) {
if (is_array($val)) {
$pars_all .= '$config[\''.$var.'\'] = [];'.$nl;
foreach ($val as $var2 => $val2) {
$pars_all .= '$config[\''.$var.'\']['.((is_int($var2)) ? $var2 : "'".$var2."'").'] = \''.my_addslashes($val2)."';$nl";
}
} else {
if (!in_array($var, $config_dontsave)) {
$pars_all .= '$config[\''.$var.'\'] = \''.my_addslashes($val)."';$nl";
}
}
}
}
foreach ($databases as $var => $val) {
if (is_array($val)) {
$pars_all .= '$databases[\''.$var.'\'] = [];'.$nl;
foreach ($val as $var2 => $val2) {
if (1 == $as) {
$pars_all .= '$databases[\''.$var.'\']['.((is_int($var2)) ? $var2 : "'".$var2."'").'] = \''.my_addslashes(stripslashes($val2))."';$nl";
} else {
$pars_all .= '$databases[\''.$var.'\']['.((is_int($var2)) ? $var2 : "'".$var2."'").'] = \''.my_addslashes($val2)."';$nl";
}
}
} else {
if (1 == $as) {
$pars_all .= '$databases[\''.$var.'\'] = \''.addslashes($val)."';$nl";
} else {
$pars_all .= '$databases[\''.$var.'\'] = \''.$val."';$nl";
}
}
}
$param .= '?>';
$pars_all .= '?>';
//Datei öffnen und schreiben
$ret = true;
$file = $config['paths']['config'].$config['config_file'].'.php';
if ($fp = fopen($file, 'wb')) {
if (!fwrite($fp, $pars_all)) {
$ret = false;
}
if (!fclose($fp)) {
$ret = false;
}
@chmod($file, 0777);
} else {
$ret = false;
}
$ret = WriteCronScript($restore_values);
return $ret;
}
function escape_specialchars($text)
{
$suchen = [
'@',
'$',
'\\\\',
'"',
];
$ersetzen = [
'\@',
'\$',
'\\',
'\"',
];
$text = str_replace($suchen, $ersetzen, $text);
return $text;
}
// definiert einen String, der ein Array nach Perlsyntax aufbaut
function my_implode($arr, $mode = 0) // 0=String, 1=intval
{
global $nl;
if (!is_array($arr)) {
return false;
}
foreach ($arr as $key => $val) {
if (0 == $mode) {
$arr[$key] = escape_specialchars($val);
} else {
$arr[$key] = intval($val);
}
}
if ($mode == 0) {
$ret='("' . implode('","', $arr) . '");' . $nl;
} else {
$ret='(' . implode(',', $arr) . ');' . $nl;
}
return $ret;
}
function WriteCronScript($restore_values = false)
{
global $nl, $config, $databases, $cron_db_array, $cron_dbpraefix_array, $cron_db_cbd_array, $cron_db_cad_array, $dontBackupDatabases;
if (!isset($databases['db_selected_index'])) {
$databases['db_selected_index'] = 0;
}
if (!isset($databases['command_before_dump'])) {
$databases['command_before_dump'] = '';
}
if (!isset($databases['command_after_dump'])) {
$databases['command_after_dump'] = '';
}
if (!isset($databases['praefix'][$databases['db_selected_index']])) {
$databases['praefix'][$databases['db_selected_index']] = '';
}
if (!isset($databases['db_actual_cronindex'])) {
$databases['db_actual_cronindex'] = $databases['db_selected_index'];
}
if (!isset($config['email_maxsize'])) {
$config['email_maxsize'] = $config['email_maxsize1'] * ((1 == $config['email_maxsize2']) ? 1024 : 1024 * 1024);
}
$cron_dbname = $databases['db_actual'];
// -2 = Multidump configuration
// -3 = all databases - nothing to do
// get standard values for all databases
$cron_db_array = $databases['Name'];
$cron_dbpraefix_array = $databases['praefix'];
$cron_command_before_dump = $databases['command_before_dump'];
$cron_command_after_dump = $databases['command_after_dump'];
if (!isset($config['cron_dbindex'])) {
$config['cron_dbindex'] = -3;
}
if (-2 == intval($config['cron_dbindex'])) {
// get selected dbs from multidump-settings
$cron_db_array = $databases['multi'];
$cron_dbpraefix_array = $databases['multi_praefix'];
$cron_command_before_dump = $databases['multi_commandbeforedump'];
$cron_command_after_dump = $databases['multi_commandafterdump'];
}
// we need to correct the index of the selected database after we cleaned
// the db-array from information_schema and mysql if it points to a db-name
if ($config['cron_dbindex'] >= 0) {
$cronDbIndexDbName = $databases['Name'][$config['cron_dbindex']];
} else {
$cronDbIndex = $config['cron_dbindex'];
}
$newDbNames = $databases['Name'];
//remove database we don't want to backup
// from newDbNames
foreach ($databases['Name'] as $k=>$v) {
if (in_array($v, $dontBackupDatabases)) {
unset($newDbNames[$k]);
}
}
// and from cron (cron_db_array has different length to newDbNames: at least mysql and information_schema are missing)
foreach ($cron_db_array as $k=>$v) {
if (in_array($v, $dontBackupDatabases)) {
unset($cron_db_array[$k],
$cron_dbpraefix_array[$k],
$cron_command_before_dump[$k],
$cron_command_after_dump[$k]
);
}
}
// find new index
if ($config['cron_dbindex'] >= 0) {
sort($newDbNames);
$dbNames = array_flip($newDbNames);
if (isset($dbNames[$cronDbIndexDbName])) {
$cronDbIndex = $dbNames[$cronDbIndexDbName];
} else {
$cronDbIndex = 0;
}
}
$r = str_replace('\\\\', '/', $config['paths']['root']);
$r = str_replace('@', "\@", $r);
$p1 = $r.$config['paths']['backup'];
$p2 = $r.$config['files']['perllog'].((isset($config['logcompression']) && (1 == $config['logcompression'])) ? '.gz' : '');
$p3 = $r.$config['files']['perllogcomplete'].((isset($config['logcompression']) && (1 == $config['logcompression'])) ? '.gz' : '');
// auf manchen Server wird statt 0 ein leerer String gespeichert -> fuehrt zu einem Syntax-Fehler
// hier die entsprechenden Ja/Nein-Variablen sicherheitshalber in intvalues aendern
$int_array = [
'dbport',
'cron_compression',
'cron_printout',
'multi_part',
'multipart_groesse',
'email_maxsize',
'auto_delete',
'max_backup_files',
'perlspeed',
'optimize_tables_beforedump',
'logcompression',
'log_maxsize',
'cron_completelog',
'cron_use_sendmail',
'cron_smtp_port',
];
foreach ($int_array as $i) {
if (is_array($i)) {
foreach ($i as $key => $val) {
$int_array[$key] = intval($val);
}
} else {
$config[$i] = isset($config[$i]) ? intval($config[$i]) : 0;
}
}
if (0 == $config['dbport']) {
$config['dbport'] = 3306;
}
$config['cron_sendmail'] = isset($config['cron_sendmail']) ? $config['cron_sendmail'] : '';
$config['cron_printout'] = isset($config['cron_printout']) ? $config['cron_printout'] : '';
$config['send_mail'] = isset($config['send_mail']) ? $config['send_mail'] : '';
$config['send_mail_dump'] = isset($config['send_mail_dump']) ? $config['send_mail_dump'] : '';
$config['email_recipient'] = isset($config['email_recipient']) ? $config['email_recipient'] : '';
$config['email_recipient_cc'] = isset($config['email_recipient_cc']) ? $config['email_recipient_cc'] : '';
$config['email_sender'] = isset($config['email_sender']) ? $config['email_sender'] : '';
$config['cron_smtp'] = isset($config['cron_smtp']) ? $config['cron_smtp'] : '';
$config['ftp_server'] = isset($config['ftp_server']) ? $config['ftp_server'] : '';
$config['ftp_port'] = isset($config['ftp_port']) ? $config['ftp_port'] : '';
$config['ftp_mode'] = isset($config['ftp_mode']) ? $config['ftp_mode'] : '';
$config['ftp_user'] = isset($config['ftp_user']) ? $config['ftp_user'] : '';
$config['ftp_pass'] = isset($config['ftp_pass']) ? $config['ftp_pass'] : '';
$config['ftp_dir'] = isset($config['ftp_dir']) ? $config['ftp_dir'] : '';
$config['ftp_timeout'] = isset($config['ftp_timeout']) ? $config['ftp_timeout'] : '';
$config['ftp_useSSL'] = isset($config['ftp_useSSL']) ? $config['ftp_useSSL'] : '';
$config['ftp_transfer'] = isset($config['ftp_transfer']) ? $config['ftp_transfer'] : '';
$config['sftp_server'] = isset($config['sftp_server']) ? $config['sftp_server'] : '';
$config['sftp_port'] = isset($config['sftp_port']) ? $config['sftp_port'] : '';
$config['sftp_user'] = isset($config['sftp_user']) ? $config['sftp_user'] : '';
$config['sftp_pass'] = isset($config['sftp_pass']) ? $config['sftp_pass'] : '';
$config['sftp_dir'] = isset($config['sftp_dir']) ? $config['sftp_dir'] : '';
$config['sftp_path_to_private_key'] = isset($config['sftp_path_to_private_key']) ? $config['sftp_path_to_private_key'] : null;
$config['sftp_secret_passphrase_for_private_key'] = isset($config['sftp_secret_passphrase_for_private_key']) ? $config['sftp_secret_passphrase_for_private_key'] : null;
$config['sftp_fingerprint'] = isset($config['sftp_fingerprint']) ? $config['sftp_fingerprint'] : null;
$config['sftp_timeout'] = isset($config['sftp_timeout']) ? $config['sftp_timeout'] : '';
$config['sftp_transfer'] = isset($config['sftp_transfer']) ? $config['sftp_transfer'] : '';
$config['cron_comment'] = isset($config['cron_comment']) ? $config['cron_comment'] : '';
$cronscript = " restore it with the actual values
if (!file_exists($config['paths']['config'].'myoosdumper.conf.php')) {
$sfile = $config['paths']['config'].'myoosdumper.conf.php';
if ($fp = fopen($sfile, 'wb')) {
if (!fwrite($fp, $cronscript)) {
$ret = false;
}
if (!fclose($fp)) {
$ret = false;
}
@chmod("$sfile", 0777);
} else {
$ret = false;
}
}
return $ret;
}
function LogFileInfo($logcompression)
{
global $config;
$l = [];
$sum = $s
= $l['log_size'] = $l['perllog_size'] = $l['perllogcomplete_size'] = $l['errorlog_size'] = $l['log_totalsize'] = 0;
if ((isset($config['logcompression']) && 1 == $config['logcompression'])) {
$l['log'] = $config['files']['log'].'.gz';
$l['perllog'] = $config['files']['perllog'].'.gz';
$l['perllogcomplete'] = $config['files']['perllogcomplete'].'.gz';
$l['errorlog'] = $config['paths']['log'].'error.log.gz';
} else {
$l['log'] = $config['files']['log'];
$l['perllog'] = $config['files']['perllog'];
$l['perllogcomplete'] = $config['files']['perllogcomplete'];
$l['errorlog'] = $config['paths']['log'].'error.log';
}
$l['log_size'] += @filesize($l['log']);
$sum += $l['log_size'];
$l['perllog_size'] += @filesize($l['perllog']);
$sum += $l['perllog_size'];
$l['perllogcomplete_size'] += @filesize($l['perllogcomplete']);
$sum += $l['perllogcomplete_size'];
$l['errorlog_size'] += @filesize($l['errorlog']);
$sum += $l['errorlog_size'];
$l['log_totalsize'] += $sum;
return $l;
}
function DeleteLog()
{
global $config;
//Datei öffnen und schreiben
$log = date('d.m.Y H:i:s')." Log created.\n";
if (file_exists($config['files']['log'].'.gz')) {
@unlink($config['files']['log'].'.gz');
}
if (file_exists($config['files']['log'].'.gz')) {
@unlink($config['files']['log']);
}
if ((isset($config['logcompression']) && 1 == $config['logcompression'])) {
$fp = @gzopen($config['files']['log'].'.gz', 'wb');
@gzwrite($fp, $log);
@gzclose($fp);
@chmod($config['files']['log'].'.gz', 0777);
} else {
$fp = @fopen($config['files']['log'], 'wb');
@fwrite($fp, $log);
@fclose($fp);
@chmod($config['files']['log'], 0777);
}
}
function CreateDirsFTP()
{
global $config, $lang, $install_ftp_server, $install_ftp_port, $install_ftp_user_name, $install_ftp_user_pass, $install_ftp_path;
// Herstellen der Basis-Verbindung
echo '