715 Zeilen
25 KiB
PHP
715 Zeilen
25 KiB
PHP
<?php
|
|
/**
|
|
* This file is part of MySQLDumper released under the GNU/GPL 2 license
|
|
* http://www.mysqldumper.net
|
|
*
|
|
* @package MySQLDumper
|
|
* @version SVN: $rev: 1207 $
|
|
* @author $Author$
|
|
* @lastmodified $Date$
|
|
*/
|
|
|
|
/**
|
|
* Output human readable Byte-Values
|
|
*
|
|
* @param integer $bytes Bytes to convert to human readable format
|
|
* @param boolean $useHTML Decides whether explaining span-tags should surround
|
|
* the returned string
|
|
*
|
|
* @return string human readable output
|
|
*/
|
|
function byteOutput($bytes, $useHTML = true)
|
|
{
|
|
$precision = 2;
|
|
if (!is_numeric($bytes) || $bytes < 0) {
|
|
return false;
|
|
}
|
|
for ($level = 0; $bytes >= 1024; $level++) {
|
|
$bytes /= 1024;
|
|
}
|
|
switch ($level)
|
|
{
|
|
case 0:
|
|
$suffix = '<span class="explain" title="Bytes">B</span>';
|
|
break;
|
|
case 1:
|
|
$suffix = '<span class="explain" title="KiloBytes">KB</span>';
|
|
break;
|
|
case 2:
|
|
$suffix = '<span class="explain" title="MegaBytes">MB</span>';
|
|
break;
|
|
case 3:
|
|
$suffix = '<span class="explain" title="GigaBytes">GB</span>';
|
|
break;
|
|
case 4:
|
|
$suffix = '<span class="explain" title="TeraBytes">TB</span>';
|
|
break;
|
|
case 5:
|
|
$suffix = '<span class="explain" title="PetaBytes">PB</span>';
|
|
break;
|
|
case 6:
|
|
$suffix = '<span class="explain" title="ExaBytes">EB</span>';
|
|
break;
|
|
case 7:
|
|
$suffix = '<span class="explain" title="YottaBytes">ZB</span>';
|
|
break;
|
|
|
|
default:
|
|
$suffix = '';
|
|
break;
|
|
}
|
|
if (!$useHTML) {
|
|
$suffix = strip_tags($suffix);
|
|
}
|
|
$ret = sprintf("%01." . $precision . "f", round($bytes, $precision));
|
|
return $ret . ' ' . $suffix;
|
|
}
|
|
|
|
/**
|
|
* Delete Multipart files
|
|
*
|
|
* @param string $dir Directory to check
|
|
* @param string $prefix Only check files with this prefix
|
|
* @param string $suffix Only check files with this suffix
|
|
*
|
|
* @return array Array $file['filename']=true | false
|
|
*/
|
|
function deleteMultipartFiles($dir, $prefix = '', $suffix = '')
|
|
{
|
|
$deleted = array();
|
|
if (substr($dir, -1) != '/') {
|
|
$dir .= '/';
|
|
}
|
|
if (is_dir($dir)) {
|
|
$d = opendir($dir);
|
|
while ($file = readdir($d)) {
|
|
if (is_file($dir . $file)) {
|
|
$del = false;
|
|
if ($prefix > '' && substr($file, 0, strlen($prefix)) == $prefix) $del = true;
|
|
if ($suffix > '' && substr($file, strlen($file) - strlen($suffix), strlen($suffix)) == $suffix) $del = true;
|
|
if ($del)
|
|
{
|
|
if (unlink($dir . $file)) $deleted[$file] = true;
|
|
else $deleted[$file] = false;
|
|
}
|
|
}
|
|
}
|
|
closedir($d);
|
|
return $deleted;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add a database to the global $databases-Array and set necessary indexes
|
|
*
|
|
* @param string $db_name Databaase-Name
|
|
* @param string $praefix Table-Prefix
|
|
* @param string $cbd Command before Dump
|
|
* @param string $cad Command after Dump
|
|
*
|
|
* @return void
|
|
*/
|
|
function addDatabaseToConfig($db_name)
|
|
{
|
|
global $databases;
|
|
if (!isset($databases)) $databases = array();
|
|
if (!isset($databases[$db_name])) $databases[$db_name] = array();
|
|
if (!isset($databases[$db_name]['dump'])) $databases[$db_name]['dump'] = 0;
|
|
if (!isset($databases[$db_name]['prefix'])) $databases[$db_name]['prefix'] = '';
|
|
if (!isset($databases[$db_name]['command_before_dump'])) $databases[$db_name]['command_before_dump'] = '';
|
|
if (!isset($databases[$db_name]['command_after_dump'])) $databases[$db_name]['command_after_dump'] = '';
|
|
}
|
|
|
|
/**
|
|
* Check settings of language, config file, reloads list of databases and save result to configuration
|
|
*
|
|
* @return string String with checked and added databases
|
|
*/
|
|
function setDefaultConfig()
|
|
{
|
|
global $config, $databases, $out, $lang, $dbo;
|
|
|
|
// check language and fallback to englisch if language file is not readable
|
|
$lang_file = './language/' . $config['language'] . '/lang.php';
|
|
if (!file_exists($lang_file) || !is_readable($lang_file))
|
|
{
|
|
$config['language'] = 'en';
|
|
}
|
|
include ('./language/' . $config['language'] . '/lang.php');
|
|
|
|
getConfig($config['config_file']); // falls back to config mysqldumper if something is wrong
|
|
// get list of databases for this user
|
|
$dbUser = $dbo->getDatabases();
|
|
foreach ($dbUser as $db)
|
|
{
|
|
// new found db? -> add it
|
|
if (!isset($databases[$db])) $databases[$db] = array();
|
|
}
|
|
ksort($databases);
|
|
foreach ($databases as $db_name => $val)
|
|
{
|
|
if ($dbo->selectDb($db_name, true))
|
|
{
|
|
addDatabaseToConfig($db_name);
|
|
$out .= $lang['L_SAVING_DB_FORM'] . " " . $db_name . " " . $lang['L_ADDED'] . "\n";
|
|
}
|
|
else
|
|
unset($databases[$db_name]);
|
|
}
|
|
saveConfig();
|
|
return $out;
|
|
}
|
|
|
|
/**
|
|
* Save actual configuration to file
|
|
*
|
|
* @return boolean
|
|
*/
|
|
function saveConfig()
|
|
{
|
|
global $config, $databases, $configDontsave;
|
|
|
|
$config['multipart_groesse'] = $config['multipartgroesse1'] * (($config['multipartgroesse2'] == 1) ? 1024 : 1024 * 1024);
|
|
if (!isset($config['email_maxsize'])) $config['email_maxsize'] = $config['email_maxsize1'] * (($config['email_maxsize2'] == 1) ? 1024 : 1024 * 1024);
|
|
if (!isset($config['cron_execution_path'])) $config['cron_execution_path'] = "msd_cron/";
|
|
|
|
$config2 = $config;
|
|
foreach ($config2 as $var => $val)
|
|
{
|
|
if (in_array($var, $configDontsave)) unset($config2[$var]);
|
|
}
|
|
|
|
$t = '$config=array_merge($config,unserialize(base64_decode(\'' . base64_encode(serialize($config2)) . "')));\r\n";
|
|
if (isset($databases)) $t .= '$databases=array_merge($databases,unserialize(base64_decode(\'' . base64_encode(serialize($databases)) . "')));\r\n";
|
|
|
|
$pars_all = '<?php' . "\n" . $t . "\n?>";
|
|
|
|
$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;
|
|
if ($ret)
|
|
{
|
|
$_SESSION['config'] = $config;
|
|
$ret = writeCronScript();
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
|
|
/**
|
|
* Build string of array according to Perl syntax (needed to save Perl configuration file)
|
|
*
|
|
* @param array $arr Array to build the string from
|
|
* @param string $mode 0 for strings, 1 for int values
|
|
*
|
|
* @return string The converted Perl string
|
|
*/
|
|
function myImplode($arr, $mode = 0) // 0=String, 1=intval
|
|
{
|
|
if (!is_array($arr)) return false;
|
|
foreach ($arr as $key => $val)
|
|
{
|
|
if ($mode == 0) $arr[$key] = Html::escapeSpecialchars($val);
|
|
else $arr[$key] = intval($val);
|
|
}
|
|
if ($mode == 0) $ret = '("' . implode('","', $arr) . '")';
|
|
else $ret = '(' . implode(',', $arr) . ')';
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Build and save the actual configuration file for Perl (used by crondump.pl)
|
|
*
|
|
* @return boolean true on success or false on failure
|
|
*/
|
|
function writeCronScript()
|
|
{
|
|
global $config, $databases, $cron_db_array, $cron_dbpraefix_array, $cron_db_cbd_array, $cron_db_cad_array;
|
|
if (!isset($config['email_maxsize'])) $config['email_maxsize'] = $config['email_maxsize1'] * (($config['email_maxsize2'] == 1) ? 1024 : 1024 * 1024);
|
|
if (isset($config['db_actual'])) $cron_dbname = $config['db_actual'];
|
|
else
|
|
{
|
|
//get first database name from database-array (this is the case at fresh installing)
|
|
$dbs = array_keys($databases);
|
|
$cron_dbname = $dbs[0];
|
|
}
|
|
// -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'];
|
|
|
|
|
|
$cron_ftp_server = '';
|
|
$cron_ftp_port = '';
|
|
$cron_ftp_mode = '';
|
|
$cron_ftp_user = '';
|
|
$cron_ftp_pass = '';
|
|
$cron_ftp_dir = '';
|
|
$cron_ftp_timeout = '';
|
|
$cron_ftp_ssl = '';
|
|
$cron_ftp_transfer = '';
|
|
|
|
//build db-arrays
|
|
foreach ($databases as $k => $v)
|
|
{
|
|
//should we dump this database
|
|
if (isset($databases[$k]['dump']) && $databases[$k]['dump'] === 1)
|
|
{
|
|
$cron_db_array[] .= $k;
|
|
$cron_dbpraefix_array[] .= $databases[$k]['prefix'];
|
|
$cron_command_before_dump[] .= $databases[$k]['command_before_dump'];
|
|
$cron_command_after_dump[] .= $databases[$k]['command_after_dump'];
|
|
}
|
|
}
|
|
|
|
//build ftp-arrays
|
|
foreach ($config['ftp'] as $k => $v)
|
|
{
|
|
$cron_ftp_server[] .= $config['ftp'][$k]['server'];
|
|
$cron_ftp_port[] .= $config['ftp'][$k]['port'];
|
|
$cron_ftp_mode[] .= $config['ftp'][$k]['mode'];
|
|
$cron_ftp_user[] .= $config['ftp'][$k]['user'];
|
|
$cron_ftp_pass[] .= $config['ftp'][$k]['pass'];
|
|
$cron_ftp_dir[] .= $config['ftp'][$k]['dir'];
|
|
$cron_ftp_timeout[] .= $config['ftp'][$k]['timeout'];
|
|
$cron_ftp_ssl[] .= $config['ftp'][$k]['ssl'];
|
|
$cron_ftp_transfer[] .= $config['ftp'][$k]['transfer'];
|
|
}
|
|
|
|
$r = str_replace("\\\\", "/", $config['paths']['root']);
|
|
$r = str_replace("@", "\@", $r);
|
|
|
|
//built recipient_cc-arrays
|
|
$recipients_cc = '';
|
|
foreach ($config['email']['recipient_cc'] as $k => $v)
|
|
{
|
|
$recipients_cc .= '"' . $config['email']['recipient_cc'][$k]['name'] . '" <' . $config['email']['recipient_cc'][$k]['address'] . '>, ';
|
|
}
|
|
$recipients_cc = substr($recipients_cc, 0, -2);
|
|
|
|
// 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 = array(
|
|
'dbport',
|
|
'cron_compression',
|
|
'cron_printout',
|
|
'multi_part',
|
|
'multipart_groesse',
|
|
'email_maxsize',
|
|
//'auto_delete][activated',
|
|
//'auto_delete][max_backup_files',
|
|
'perlspeed',
|
|
'optimize_tables_beforedump',
|
|
'logcompression',
|
|
'log_maxsize',
|
|
'cron_completelog',
|
|
'use_sendmail',
|
|
'smtp_port',
|
|
'smtp_useauth',
|
|
'smtp_usessl');
|
|
|
|
foreach ($int_array as $i)
|
|
{
|
|
if (is_array($i))
|
|
{
|
|
foreach ($i as $key => $val)
|
|
{
|
|
$int_array[$key] = intval($val);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!isset($config[$i])) $config[$i] = 0;
|
|
$config[$i] = intval($config[$i]);
|
|
}
|
|
}
|
|
if ($config['dbport'] == 0) $config['dbport'] = 3306;
|
|
|
|
$cronscript = "<?php\n#Vars - written at " . date("Y-m-d H:i") . "\n";
|
|
$cronscript .= '$dbhost="' . $config['dbhost'] . '";' . "\n";
|
|
$cronscript .= '$dbname="' . $cron_dbname . '";' . "\n";
|
|
$cronscript .= '$dbuser="' . Html::escapeSpecialchars($config['dbuser']) . '";' . "\n";
|
|
$cronscript .= '$dbpass="' . Html::escapeSpecialchars($config['dbpass']) . '";' . "\n";
|
|
$cronscript .= '$dbport=' . $config['dbport'] . ';' . "\n";
|
|
$cronscript .= '$dbsocket="' . Html::escapeSpecialchars($config['dbsocket']) . '";' . "\n";
|
|
$cronscript .= '$compression=' . $config['cron_compression'] . ';' . "\n";
|
|
$cronscript .= '$sendmail_call="' . Html::escapeSpecialchars($config['sendmail_call']) . '";' . "\n";
|
|
$cronscript .= '$backup_path="' . $config['paths']['root'] . $config['paths']['backup'] . '";' . "\n";
|
|
$cronscript .= '$cron_printout=' . $config['cron_printout'] . ';' . "\n";
|
|
$cronscript .= '$cronmail=' . $config['send_mail'] . ';' . "\n";
|
|
$cronscript .= '$cronmail_dump=' . $config['email']['attach_backup'] . ';' . "\n";
|
|
$cronscript .= '$cronmailto="' . Html::escapeSpecialchars('"' . $config['email']['recipient_name'] . '" <' . $config['email']['recipient_address'] . '>') . '";' . "\n";
|
|
$cronscript .= '$cronmailto_cc="' . Html::escapeSpecialchars($recipients_cc) . '";' . "\n";
|
|
$cronscript .= '$cronmailfrom="' . Html::escapeSpecialchars('"' . $config['email']['sender_name'] . '" <' . $config['email']['sender_address'] . '>') . '";' . "\n";
|
|
$cronscript .= '$cron_use_sendmail=' . $config['use_sendmail'] . ';' . "\n";
|
|
$cronscript .= '$cron_smtp="' . Html::escapeSpecialchars($config['smtp_server']) . '";' . "\n";
|
|
$cronscript .= '$smtp_port=' . $config['smtp_port'] . ';' . "\n";
|
|
$cronscript .= '$smtp_useauth=' . $config['smtp_useauth'] . ';' . "\n";
|
|
$cronscript .= '$smtp_usessl=' . $config['smtp_usessl'] . ';' . "\n";
|
|
$cronscript .= '$smtp_user="' . $config['smtp_user'] . '";' . "\n";
|
|
$cronscript .= '$smtp_pass="' . $config['smtp_pass'] . '";' . "\n";
|
|
$cronscript .= '@cron_db_array=' . myImplode($cron_db_array) . ';' . "\n";
|
|
$cronscript .= '@cron_dbpraefix_array=' . myImplode($cron_dbpraefix_array) . ';' . "\n";
|
|
$cronscript .= '@cron_command_before_dump=' . myImplode($cron_command_before_dump) . ';' . "\n";
|
|
$cronscript .= '@cron_command_after_dump=' . myImplode($cron_command_after_dump) . ';' . "\n";
|
|
|
|
$cronscript .= '@ftp_server=' . myImplode($cron_ftp_server) . ';' . "\n";
|
|
$cronscript .= '@ftp_port=' . myImplode($cron_ftp_port, 1) . ';' . "\n";
|
|
$cronscript .= '@ftp_mode=' . myImplode($cron_ftp_mode, 1) . ';' . "\n";
|
|
$cronscript .= '@ftp_user=' . myImplode($cron_ftp_user) . ';' . "\n";
|
|
$cronscript .= '@ftp_pass=' . myImplode($cron_ftp_pass) . ';' . "\n";
|
|
$cronscript .= '@ftp_dir=' . myImplode($cron_ftp_dir) . ';' . "\n";
|
|
$cronscript .= '@ftp_timeout=' . myImplode($cron_ftp_timeout, 1) . ';' . "\n";
|
|
$cronscript .= '@ftp_useSSL=' . myImplode($cron_ftp_ssl, 1) . ';' . "\n";
|
|
$cronscript .= '@ftp_transfer=' . myImplode($cron_ftp_transfer, 1) . ';' . "\n";
|
|
|
|
$cronscript .= '$mp=' . $config['multi_part'] . ';' . "\n";
|
|
$cronscript .= '$multipart_groesse=' . $config['multipart_groesse'] . ';' . "\n";
|
|
$cronscript .= '$email_maxsize=' . $config['email_maxsize'] . ';' . "\n";
|
|
$cronscript .= '$auto_delete=' . $config['auto_delete']['activated'] . ';' . "\n";
|
|
$cronscript .= '$max_backup_files=' . $config['auto_delete']['max_backup_files'] . ';' . "\n";
|
|
$cronscript .= '$perlspeed=' . $config['perlspeed'] . ';' . "\n";
|
|
$cronscript .= '$optimize_tables_beforedump=' . $config['optimize_tables_beforedump'] . ';' . "\n";
|
|
$cronscript .= '$logcompression=' . $config['logcompression'] . ';' . "\n";
|
|
|
|
//add .gz to logfiles?
|
|
if ($config['logcompression'] === 1)
|
|
{
|
|
$cronscript .= '$logdatei="' . $config['paths']['root'] . $config['files']['perllog'] . '.gz";' . "\n";
|
|
$cronscript .= '$completelogdatei="' . $config['paths']['root'] . $config['files']['perllogcomplete'] . '.gz";' . "\n";
|
|
}
|
|
else
|
|
{
|
|
$cronscript .= '$logdatei="' . $config['paths']['root'] . $config['files']['perllog'] . '";' . "\n";
|
|
$cronscript .= '$completelogdatei="' . $config['paths']['root'] . $config['files']['perllogcomplete'] . '";' . "\n";
|
|
}
|
|
$cronscript .= '$log_maxsize=' . $config['log_maxsize'] . ';' . "\n";
|
|
$cronscript .= '$complete_log=' . $config['cron_completelog'] . ';' . "\n";
|
|
$cronscript .= '$cron_comment="' . Html::escapeSpecialchars(stripslashes($config['cron_comment'])) . '";' . "\n";
|
|
$cronscript .= "?>";
|
|
|
|
// Save config
|
|
$ret = true;
|
|
$sfile = './' . $config['paths']['config'] . $config['config_file'] . '.conf.php';
|
|
if (file_exists($sfile)) @unlink($sfile);
|
|
|
|
if ($fp = @fopen($sfile, "wb"))
|
|
{
|
|
if (!fwrite($fp, $cronscript)) $ret = false;
|
|
if (!fclose($fp)) $ret = false;
|
|
@chmod("$sfile", 0777);
|
|
}
|
|
else
|
|
$ret = false;
|
|
|
|
// if standard config was deleted -> restore it with the actual values
|
|
if (!file_exists('./' . $config['paths']['config'] . "mysqldumper.conf.php"))
|
|
{
|
|
$sfile = './' . $config['paths']['config'] . 'mysqldumper.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;
|
|
}
|
|
|
|
/**
|
|
* Collect log file information and return it as assoziative array
|
|
*
|
|
* @param boolean $logcompression Watch for compressed (true) or uncompressed files
|
|
*
|
|
* @return array Associative array with information
|
|
*/
|
|
function getLogFileInfo($logcompression)
|
|
{
|
|
global $config;
|
|
|
|
$l = Array();
|
|
$sum = $s = $l['log_size'] = $l['perllog_size'] = $l['perllogcomplete_size'] = $l['errorlog_size'] = $l['log_totalsize'] = 0;
|
|
if ($logcompression == 1)
|
|
{
|
|
$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;
|
|
}
|
|
|
|
/**
|
|
* Delete log file and recreates it.
|
|
*
|
|
* @return void
|
|
*/
|
|
function deleteLog()
|
|
{
|
|
global $config;
|
|
$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 ($config['logcompression'] == 1)
|
|
{
|
|
$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);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Detect accessable databases for the current SQL-User in $config-array and returns output-string with all dbs
|
|
* Additionally it adds all found databases in the global var $databases
|
|
*
|
|
* @param boolean $printout Wether to return the output string or not
|
|
* @param string $db Optional name of a database to add manually
|
|
*
|
|
* @return string Output string containing all found dbs
|
|
*/
|
|
function searchDatabases($printout = 0, $db = '')
|
|
{
|
|
global $config, $lang, $dbo, $databases;
|
|
$databases = array();
|
|
$ret = '';
|
|
$db_list = $dbo->getDatabases();
|
|
// add manual added db to array, but only if it was not detected before
|
|
if ($db > '' && !in_array($db, $db_list)) $db_list[] = $db;
|
|
// now check if we can select the db - if not, we can't access the database
|
|
if (sizeof($db_list) > 0)
|
|
{
|
|
foreach ($db_list as $db)
|
|
{
|
|
$res = $dbo->selectDb($db, true);
|
|
|
|
if ($res === true)
|
|
{
|
|
addDatabaseToConfig($db);
|
|
if ($printout == 1) $ret .= Html::getOkMsg($lang['L_FOUND_DB'] . ' `' . $db);
|
|
} elseif ($printout == 1) {
|
|
$ret .= Html::getErrorMsg($lang['L_ERROR'].' : '.$res);
|
|
}
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* realpath implementation working on any server
|
|
*
|
|
* @return $dir string The application path
|
|
*/
|
|
function myRealpath()
|
|
{
|
|
$dir = dirname(__FILE__);
|
|
$dir = str_replace('\\', '/', $dir);
|
|
$dir = str_replace('//', '/', $dir);
|
|
if (substr($dir, -14) == '/inc/functions') $dir = substr($dir, 0, -13);
|
|
if (substr($dir, -1) != '/') $dir .= '/';
|
|
return $dir;
|
|
}
|
|
|
|
/**
|
|
* Remove tags recursivly from array or from string
|
|
*
|
|
* @param $value string | array Value/s to strip
|
|
*
|
|
* @return string|array Cleaned values
|
|
*/
|
|
function myStripTags($value)
|
|
{
|
|
global $dont_strip;
|
|
if (is_array($value))
|
|
{
|
|
foreach ($value as $key => $val)
|
|
{
|
|
if (!in_array($key, $dont_strip)) $ret[$key] = myStripTags($val);
|
|
else $ret[$key] = $val;
|
|
}
|
|
}
|
|
else
|
|
$ret = trim(strip_tags($value));
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* First start output buffering then start SESSION
|
|
* Reads configuration and main-language file lang.php and creates
|
|
* Database-Object $dbo
|
|
*
|
|
* @param string $json Return JSON-Encoded answer
|
|
* @param string $send_header If set to false headers are completely skipped
|
|
* @return void
|
|
*/
|
|
function obstart($json = false, $send_header = true)
|
|
{
|
|
global $dbo, $config, $databases, $dump, $lang;
|
|
if ($config['ob_gzhandler'])
|
|
{
|
|
if (!@ob_start("ob_gzhandler")) @ob_start();
|
|
}
|
|
|
|
// if default config file doesn't exists, it is a new installation -> redirect to installation
|
|
if (!$json && !file_exists('./work/config/mysqldumper.php'))
|
|
{
|
|
header("location: install.php");
|
|
die();
|
|
exit();
|
|
}
|
|
|
|
session_name('MySQLDumper');
|
|
$res = session_start();
|
|
if (false === $res) die("Error starting session! Check server.");
|
|
if (isset($_SESSION['config_file'])) $config['config_file'] = $_SESSION['config_file'];
|
|
else $config['config_file'] = 'mysqldumper';
|
|
if ($send_header)
|
|
{
|
|
header('Pragma: no-cache');
|
|
header('Cache-Control: no-cache, must-revalidate'); // HTTP/1.1
|
|
header('Expires: -1'); // Datum in der Vergangenheit
|
|
header('Cache-Control: no-store, no-cache, must-revalidate');
|
|
header('Cache-Control: post-check=0, pre-check=0', false);
|
|
header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
|
|
if (!$json) header('Content-Type: text/html; charset=UTF-8');
|
|
else header('Content-type: application/x-json');
|
|
}
|
|
// get config from configuration file if not set
|
|
if (!isset($_SESSION['config'])) getConfig($config['config_file']);
|
|
else
|
|
{
|
|
// otherwise get parameters from session
|
|
$config = array_merge($config, $_SESSION['config']);
|
|
if (isset($_SESSION['databases'])) $databases = $_SESSION['databases'];
|
|
if (isset($_SESSION['dump'])) $dump = $_SESSION['dump'];
|
|
}
|
|
// special case -> configuration is set to a language that was deleted meanwhile
|
|
if (!is_readable('./language/' . $config['language'] . '/lang.php')) $config['language'] = 'en';
|
|
|
|
include ('./language/' . $config['language'] . '/lang.php');
|
|
// create database object
|
|
$dbo = MsdDbFactory::getAdapter($config['dbhost'], $config['dbuser'], $config['dbpass'], $config['dbport'], $config['dbsocket']);
|
|
if (!isset($_SESSION['databases'])) setDefaultConfig();
|
|
//echo $config['db_actual'];
|
|
// die();
|
|
if (isset($config['db_actual']) && $config['db_actual'] > '') $dbo->selectDb($config['db_actual']);
|
|
else
|
|
{
|
|
if (!isset($databases)) {
|
|
// no config loaded -> SetDefault-Values
|
|
setDefaultConfig();
|
|
}
|
|
// get first DB-Name and set as actual db
|
|
$dbNames = array_keys($databases);
|
|
$config['db_actual'] = $dbNames[0];
|
|
$dbo->selectDb($config['db_actual']);
|
|
}
|
|
//$_SESSION['config'] = $config;
|
|
//$_SESSION['databases'] = $databases;
|
|
}
|
|
|
|
/**
|
|
* Add end of body/html, end output buffering and output the buffer
|
|
*
|
|
* @param boolean $ajax
|
|
* @return void
|
|
*/
|
|
function obend($ajax = false)
|
|
{
|
|
global $config, $databases;
|
|
$_SESSION['databases'] = $databases;
|
|
$_SESSION['config'] = $config;
|
|
if (!$ajax) {
|
|
echo '</div>' . "\n\n" . '</body>' . "\n\n" . '</html>';
|
|
// close HTML-page
|
|
}
|
|
@ob_end_flush();
|
|
}
|
|
|
|
/**
|
|
* Extract unique prefixes from an array
|
|
*
|
|
* and return new array containing the different prefixes
|
|
*
|
|
* @param array $array Array to scan for prefixes
|
|
* @param boolean $addNoneOption Wether to add a first entry '---'
|
|
*
|
|
* @return $prefix_array array The array conatining the unique prefixes
|
|
*/
|
|
function getPrefixArray($array, $addNoneOption = true)
|
|
{
|
|
$prefixes = array();
|
|
$keys = array_keys($array);
|
|
foreach ($keys as $k) {
|
|
$pos = strpos($k, '_'); // find '_'
|
|
if ($pos !== false) {
|
|
$prefix = substr($k, 0, $pos);
|
|
if (!in_array($prefix, $prefixes)) {
|
|
$prefixes[$prefix] = $prefix;
|
|
}
|
|
}
|
|
}
|
|
if ($addNoneOption) {
|
|
$prefixes['-1'] = '---';
|
|
}
|
|
ksort($prefixes);
|
|
return $prefixes;
|
|
}
|
|
|
|
/**
|
|
* Implode the given keys of multidimensional array using the implode string
|
|
*
|
|
* @param array $array The array to implode
|
|
* @param string $key The values that should be imploded
|
|
* @param string $implodeString The string to concatenate the values with
|
|
*
|
|
* @return string The impoloded valuies as string
|
|
*/
|
|
function implodeSubarray($array, $key, $implodeString = ', ')
|
|
{
|
|
$ret = '';
|
|
foreach ($array as $k => $v) {
|
|
$ret .= $v[$key] . $implodeString;
|
|
}
|
|
if (strlen($ret) > 1) {
|
|
$ret = substr($ret, 0, -(strlen($implodeString)));
|
|
}
|
|
return $ret;
|
|
}
|
|
|