1
0
Fork 0
MySQLDumper/inc/functions_global.php
e-dschungel 72998c0df3 switched to mysqli_select_db
the emulation of mysql_select_db with the USE statement did not quote the table name so table names which need quotation (which contain dashes for example) were not handled correctly
the emualtion is not needed, see https://github.com/philip/MySQLConverterTool/issues/20
2017-01-29 21:42:37 +01:00

1423 Zeilen
44 KiB
PHP

<?php
$msd_path = basePath();
if (!defined('MSD_PATH')) {
define('MSD_PATH', $msd_path);
}
if (file_exists(MSD_PATH . 'inc/runtime.php')) {
include(MSD_PATH . 'inc/runtime.php');
} else {
die('Couldn\'t read runtime.php!');
}
if (!defined('MSD_VERSION')) {
die('No direct access.');
}
// places all Page Parameters in hidden-fields (needed fpr backup and restore in PHP)
function get_page_parameter($parameter, $ziel = 'dump')
{
$page_parameter = '<form action="' . $ziel . '.php" method="POST" name="' . $ziel . '">' . "\n";
foreach ($parameter as $key => $val) {
if (is_array($val)) {
foreach ($val as $key2 => $val2) {
$page_parameter .= '<input type="hidden" name="' . $key . '[' . $key2 . ']' . '" value="' . $val2 . '">'
. "\n";
}
} else {
$page_parameter .= '<input type="hidden" name="' . $key . '" value="' . $val . '">' . "\n";
}
}
$page_parameter .= '</form>';
return $page_parameter;
}
function mu_sort($array, $key_sort)
{
$key_sorta = explode(',', $key_sort);
$keys = array_keys($array[0]);
$n = 0;
for ($m = 0; $m < count($key_sorta); $m++) {
$nkeys[$m] = trim($key_sorta[$m]);
}
$n += count($key_sorta);
for ($i = 0; $i < count($keys); $i++) {
if (!in_array($keys[$i], $key_sorta)) {
$nkeys[$n] = $keys[$i];
$n += "1";
}
}
for ($u = 0; $u < count($array); $u++) {
$arr = $array[$u];
for ($s = 0; $s < count($nkeys); $s++) {
$k = $nkeys[$s];
if (isset($array[$u][$k])) {
$output[$u][$k] = $array[$u][$k];
}
}
}
// wenn die Sortierung nicht ab- sondern aufsteigend sein soll, muss sort() benutzt werden
sort($output); // Sort=Aufsteigend -> oder rsort=absteigend
return $output;
}
function FillMultiDBArrays()
{
global $config, $databases;
// Nur füllen wenn überhaupt Datenbanken gefunden wurden
if ((isset($databases['Name'])) && (count($databases['Name']) > 0)) {
$databases['multi'] = Array();
$databases['multi_praefix'] = Array();
if (!isset($databases['db_selected_index'])) {
$databases['db_selected_index'] = 0;
}
if (!isset($databases['db_actual']) && isset($databases['Name'])) {
$databases['db_actual'] = $databases['Name'][$databases['db_selected_index']];
}
if (!isset($databases['multisetting'])) {
$databases['multisetting'] = '';
}
// if($config['multi_dump']==1)
// {
if ($databases['multisetting'] == '') {
//$databases['multi'][0]=$databases['db_actual'];
//$databases['multi_praefix'][0]=(isset($databases['praefix'][0])) ? $databases['praefix'][0] : '';
} else {
$databases['multi'] = explode(';', $databases['multisetting']);
$flipped = array_flip($databases['Name']);
for ($i = 0; $i < count($databases['multi']); $i++) {
if (isset($flipped[$databases['multi'][$i]])) {
$ind = $flipped[$databases['multi'][$i]];
$databases['multi_praefix'][$i] = (isset($databases['praefix'][$ind])) ? $databases['praefix'][$ind]
: '';
}
}
}
// }
/*
else
{
$databases['multi'][0]=(isset($databases['db_actual'])) ? $databases['db_actual'] : '';
$databases['multi_praefix'][0]=(isset($databases['praefix'])) ? $databases['praefix'][$databases['db_selected_index']] : '';
}
*/
}
}
function DBDetailInfo($index)
{
global $databases, $config;
$databases['Detailinfo']['tables'] = $databases['Detailinfo']['records'] = $databases['Detailinfo']['size'] = 0;
MSD_mysql_connect();
if (isset($databases['Name'][$index])) {
mysqli_select_db($GLOBALS["___mysqli_ston"], $databases['Name'][$index]);
$databases['Detailinfo']['Name'] = $databases['Name'][$index];
$res = @mysqli_query(
$GLOBALS["___mysqli_ston"],
'SHOW TABLE STATUS FROM `' . $databases['Name'][$index] . '`'
);
if ($res) {
$databases['Detailinfo']['tables'] = mysqli_num_rows($res);
}
if ($databases['Detailinfo']['tables'] > 0) {
$s1 = $s2 = 0;
while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
$s1 += $row['Rows'];
$s2 += $row['Data_length'] + $row['Index_length'];
}
$databases['Detailinfo']['records'] = $s1;
$databases['Detailinfo']['size'] = $s2;
}
}
}
function Stringformat($s, $count)
{
if ($count >= strlen($s)) {
return str_repeat("0", $count - strlen($s)) . $s;
} else {
return $s;
}
}
function getmicrotime()
{
list ($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function MD_FreeDiskSpace()
{
global $lang;
$dfs = @diskfreespace("../");
return ($dfs) ? byte_output($dfs) : $lang['L_NOTAVAIL'];
}
function WriteDynamicText($txt, $object)
{
return '<script language="JavaScript">WP("' . addslashes($txt) . ',' . $object . '");</script>';
}
function byte_output($bytes, $precision = 2, $names = Array())
{
if (!is_numeric($bytes) || $bytes < 0) {
return false;
}
for ($level = 0; $bytes >= 1024; $level++) {
$bytes /= 1024;
}
switch ($level) {
case 0:
$suffix = (isset($names[0])) ? $names[0] : '<span class="explain" title="Bytes">B</span>';
break;
case 1:
$suffix = (isset($names[1])) ? $names[1] : '<span class="explain" title="KiloBytes">KB</span>';
break;
case 2:
$suffix = (isset($names[2])) ? $names[2] : '<span class="explain" title="MegaBytes">MB</span>';
break;
case 3:
$suffix = (isset($names[3])) ? $names[3] : '<span class="explain" title="GigaBytes">GB</span>';
break;
case 4:
$suffix = (isset($names[4])) ? $names[4] : '<span class="explain" title="TeraBytes">TB</span>';
break;
case 5:
$suffix = (isset($names[4])) ? $names[4] : '<span class="explain" title="PetaBytes">PB</span>';
break;
case 6:
$suffix = (isset($names[4])) ? $names[4] : '<span class="explain" title="ExaBytes">EB</span>';
break;
case 7:
$suffix = (isset($names[4])) ? $names[4] : '<span class="explain" title="YottaBytes">ZB</span>';
break;
default:
$suffix = (isset($names[$level])) ? $names[$level] : '';
break;
}
return sprintf("%01." . $precision . "f", round($bytes, $precision)) . ' ' . $suffix;
}
function ExtractDBname($s)
{
$sp = explode('_', $s);
$anz = count($sp) - 1;
$r = 0;
if ($anz > 4) {
$df = 5; //Datumsfelder
if ($sp[$anz - 1] == 'part') {
$df += 2;
}
if ($sp[$anz - 3] == 'crondump' || $sp[$anz - 1] == 'crondump') {
$df += 2;
}
$anz = $anz - $df; //Datum weg
for ($i = 0; $i <= $anz; $i++) {
$r += strlen($sp[$i]) + 1;
}
return substr($s, 0, $r - 1);
} else {
//Fremdformat
return substr($s, 0, strpos($s, '.'));
}
}
function ExtractBUT($s)
{
$i = strpos(strtolower($s), "part");
if ($i > 0) {
$s = substr($s, 0, $i - 1);
}
$i = strpos(strtolower($s), "crondump");
if ($i > 0) {
$s = substr($s, 0, $i - 1);
}
$i = strpos(strtolower($s), ".sql");
if ($i > 0) {
$s = substr($s, 0, $i);
}
$sp = explode("_", $s);
$anz = count($sp) - 1;
if (strtolower($sp[$anz]) == 'perl') {
$anz--;
}
if ($anz > 4) {
return $sp[$anz - 2] . "." . $sp[$anz - 3] . "." . $sp[$anz - 4] . " " . $sp[$anz - 1] . ":" . $sp[$anz];
} else {
//Fremdformat
return "";
}
}
function WriteLog($aktion)
{
global $config, $lang;
$log = date('d.m.Y H:i:s') . ' ' . htmlspecialchars($aktion) . "\n";
$logfile = ($config['logcompression'] == 1) ? $config['files']['log'] . '.gz' : $config['files']['log'];
if (@filesize($logfile) + strlen($log) > $config['log_maxsize']) {
@unlink($logfile);
}
//Datei öffnen und schreiben
if ($config['logcompression'] == 1) {
$fp = @gzopen($logfile, 'a');
if ($fp) {
@gzwrite($fp, $log) . '<br>';
@gzclose($fp);
} else {
echo '<p class="warnung">' . $lang['L_LOGFILENOTWRITABLE'] . ' (' . $logfile . ')</p>';
}
} else {
$fp = @fopen($logfile, "ab");
if ($fp) {
@fwrite($fp, $log);
@fclose($fp);
} else {
echo '<p class="warnung">' . $lang['L_LOGFILENOTWRITABLE'] . ' (' . $logfile . ')</p>';
}
}
}
function ErrorLog($dest, $db, $sql, $error, $art = 1)
{
//$art=0 -> Fehlermeldung
//$art=1 -> Hinweis
global $config;
if (strlen($sql) > 100) {
$sql = substr($sql, 0, 100) . " ... (snip)";
}
//Error-Zeile generieren
$errormsg = date('d.m.Y H:i:s') . ': ';
$errormsg .= ($dest == 'RESTORE') ? ' Restore of db `' . $db . '`|:|' : ' Dump of db `' . $db . '`|:|';
if ($art == 0) {
$errormsg .= '<font color="red">Error-Message: ' . $error . '</font>|:|';
} else {
$errormsg .= '<font color="green">Notice: ' . $error . '</font>|:|';
}
if ($sql > '') {
$errormsg .= 'SQL: ' . $sql . "\n";
}
//Datei öffnen und schreiben
if ($config['logcompression'] == 1) {
$fp = @gzopen($config['paths']['log'] . 'error.log.gz', 'ab');
if ($fp) {
@gzwrite($fp, ($errormsg));
@gzclose($fp);
}
} else {
$fp = @fopen($config['paths']['log'] . 'error.log', 'ab');
if ($fp) {
@fwrite($fp, ($errormsg));
@fclose($fp);
}
}
}
function DirectoryWarnings($path = "")
{
global $config, $lang;
$warn = '';
if (!is_writable($config['paths']['work'])) {
$warn .= sprintf($lang['L_WRONG_RIGHTS'], $config['paths']['work'], '0777');
}
if (!is_writable($config['paths']['config'])) {
$warn .= sprintf($lang['L_WRONG_RIGHTS'], $config['paths']['config'], '0777');
}
if (!is_writable($config['paths']['backup'])) {
$warn .= sprintf($lang['L_WRONG_RIGHTS'], $config['paths']['backup'], '0777');
}
if (!is_writable($config['paths']['log'])) {
$warn .= sprintf($lang['L_WRONG_RIGHTS'], $config['paths']['log'], '0777');
}
if ($warn != '') {
$warn = '<span class="warnung"><strong>' . $warn . '</strong></span>';
}
return $warn;
}
function TestWorkDir()
{
global $config;
$ret = SetFileRechte($config['paths']['work']);
if ($ret === true) {
$ret = SetFileRechte($config['paths']['backup']);
}
if ($ret === true) {
$ret = SetFileRechte($config['paths']['log']);
}
if ($ret === true) {
$ret = SetFileRechte($config['paths']['config']);
}
if ($ret === true) {
if (!file_exists($config['files']['parameter'])) {
SetDefault(true);
}
if (!file_exists($config['files']['log'])) {
DeleteLog();
}
}
return $ret;
}
function SetFileRechte($file, $is_dir = 1, $perm = 0777)
{
global $lang;
$ret = true;
if ($is_dir == 1) {
if (substr($file, -1) != "/") {
$file .= "/";
}
}
clearstatcache();
// erst pruefen, ob Datei oder Verzeichnis existiert
if (!file_exists($file)) {
// Wenn es sich um ein Verzeichnis handelt -> anlegen
if ($is_dir == 1) {
$ret = @mkdir($file, $perm);
if (!$ret === true) {
// Hat nicht geklappt -> Rueckmeldung
$ret = sprintf($lang['L_CANT_CREATE_DIR'], $file);
}
}
}
// wenn bisher alles ok ist -> Rechte setzen - egal ob Datei oder Verzeichnis
if ($ret === true) {
$ret = @chmod($file, $perm);
if (!$ret === true) {
$ret = sprintf($lang['L_WRONG_RIGHTS'], $file, decoct($perm));
}
}
return $ret;
}
function SelectDB($index)
{
global $databases;
if (is_string($index)) {
// name given
$dbNames = array_flip($databases['Name']);
if (array_key_exists($index, $dbNames)) {
$index = $dbNames[$index];
}
}
if (isset($databases['Name'][$index])) {
$databases['db_actual'] = $databases['Name'][$index];
if (isset($databases['praefix'][$index])) {
$databases['praefix'][$databases['db_selected_index']] = $databases['praefix'][$index];
} else {
$databases['praefix'][$databases['db_selected_index']] = '';
}
if (isset($databases['db_selected_index'])) {
$databases['db_selected_index'] = $index;
} else {
$databases['db_selected_index'] = 0;
}
} else {
// keine DB vorhanden
$databases['praefix'][$databases['db_selected_index']] = '';
$databases['db_selected_index'] = 0;
$databases['db_actual'] = '';
}
}
function EmptyDB($dbn)
{
global $config;
$t_sql = array();
@mysqli_query($GLOBALS["___mysqli_ston"], 'SET FOREIGN_KEY_CHECKS=0');
$res = mysqli_query($config['dbconnection'], 'SHOW TABLE STATUS FROM `' . $dbn . '`') or die('EmptyDB: '
. ((is_object($GLOBALS["___mysqli_ston"]))
? mysqli_error($GLOBALS["___mysqli_ston"])
: (($___mysqli_res
= mysqli_connect_error()) ? $___mysqli_res : false)));
WHILE ($row = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
if (substr(strtoupper($row['Comment']), 0, 4) == 'VIEW') {
$t_sql[] = 'DROP VIEW `' . $dbn . '`.`' . $row['Name'] . '`';
} else {
$t_sql[] = 'DROP TABLE `' . $dbn . '`.`' . $row['Name'] . '`';
}
}
if (sizeof($t_sql) > 0) {
for ($i = 0; $i < count($t_sql); $i++) {
$res = mysqli_query($GLOBALS["___mysqli_ston"], $t_sql[$i]) or die('EmptyDB-Error: ' . ((is_object(
$GLOBALS["___mysqli_ston"]
)) ? mysqli_error($GLOBALS["___mysqli_ston"])
: (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));
}
}
@mysqli_query($GLOBALS["___mysqli_ston"], 'SET FOREIGN_KEY_CHECKS=1');
}
function AutoDelete()
{
global $del_files, $config, $lang, $out;
$out = '';
if ($config['max_backup_files'] > 0) {
//Files einlesen
$dh = opendir($config['paths']['backup']);
$dbbackups = array();
$files = array();
// Build assoc Array $db=>$timestamp=>$filenames
while (false !== ($filename = readdir($dh))) {
if ($filename != '.' && $filename != '..' && !is_dir($config['paths']['backup'] . $filename)) {
//statuszeile auslesen
if (substr($filename, -2) == 'gz') {
$fp = gzopen($config['paths']['backup'] . $filename, 'r');
$sline = gzgets($fp, 40960);
gzclose($fp);
} else {
$fp = fopen($config['paths']['backup'] . $filename, 'r');
$sline = fgets($fp, 500);
fclose($fp);
}
$statusline = ReadStatusline($sline);
if ($statusline['dbname'] != 'unknown') {
$tabellenanzahl = ($statusline['tables'] == -1) ? '' : $statusline['tables'];
$eintraege = ($statusline['records'] == -1) ? '' : $statusline['records'];
$part = ($statusline['part'] == 'MP_0' || $statusline['part'] = '')
? 0
: substr(
$statusline['part'],
3
);
$db_name = $statusline['dbname'];
$datum = substr($filename, strlen($db_name) + 1);
$timestamp = substr($datum, 0, 16);
if (!isset($files[$db_name])) {
$files[$db_name] = array();
}
if (!isset($files[$db_name][$timestamp])) {
$files[$db_name][$timestamp] = array();
}
$files[$db_name][$timestamp][] = $filename;
}
}
}
$out = ''; // stores output messages
// Backups pro DB und Timestamp ermitteln
foreach ($files as $db => $val) {
//echo "<br>DB ".$db." hat ".sizeof($val)." Backups.";
if (sizeof($val) > $config['max_backup_files']) {
$db_files = $val;
krsort($db_files, SORT_STRING);
//now latest backupfiles are on top -> delete all files with greater index
$i = 0;
foreach ($db_files as $timestamp => $filenames) {
if ($i >= $config['max_backup_files']) {
// Backup too old -> delete files
foreach ($filenames as $f) {
if ($out == '') {
$out .= $lang['L_FM_AUTODEL1'] . '<br>';
}
if (@unlink('./' . $config['paths']['backup'] . $f)) {
$out .= '<span class="nomargin">' . sprintf($lang['L_DELETE_FILE_SUCCESS'], $f)
. '</span><br>';
} else {
$out .= $lang['L_ERROR'] . ': <span class="error nomargin">' . sprintf(
$lang['L_DELETE_FILE_ERROR'],
$f
) . '</span><br>';
}
}
}
$i++;
}
}
}
}
return $out;
}
function DeleteFile($files, $function = 'max')
{
global $config, $lang;
$delfile = explode("|", $files);
$r = '<p class="error">' . $lang['L_FM_AUTODEL1'] . '<br>';
$r .= $delfile[3] . "<br>";
$part = $delfile[2];
if ($part > 0) {
for ($i = $part; $i > 0; $i--) {
$delete = @unlink($config['paths']['backup'] . $delfile[3]);
if ($delete) {
WriteLog("autodeleted ($function) '$delfile[3]'.");
}
}
} else {
WriteLog("autodeleted ($function) '$delfile[3]'.");
unlink($config['paths']['backup'] . $delfile[3]);
}
$r .= '</p>';
return $r;
}
function ReadStatusline($line)
{
/*AUFBAU der Statuszeile:
-- Status:tabellenzahl:datensätze:Multipart:Datenbankname:script:scriptversion:Kommentar:MySQLVersion:Backupflags:SQLBefore:SQLAfter:Charset:EXTINFO
Aufbau Backupflags (1 Zeichen pro Flag, 0 oder 1, 2=unbekannt)
(complete inserts)(extended inserts)(ignore inserts)(delayed inserts)(downgrade)(lock tables)(optimize tables)
*/
global $lang;
$statusline = Array();
if ((substr($line, 0, 8) != "# Status" && substr($line, 0, 9) != "-- Status")
|| substr($line, 0, 10) == '-- StatusC'
) {
//Fremdfile
$statusline['tables'] = -1;
$statusline['records'] = -1;
$statusline['part'] = 'MP_0';
$statusline['dbname'] = 'unknown';
$statusline['script'] = '';
$statusline['scriptversion'] = '';
$statusline['comment'] = '';
$statusline['mysqlversion'] = 'unknown';
$statusline['flags'] = '2222222';
$statusline['sqlbefore'] = '';
$statusline['sqlafter'] = '';
$statusline['charset'] = '?';
} else {
// MySQLDumper-File - Informationen extrahieren
$s = explode(':', $line);
if (count($s) < 12) {
//fehlenden Elemente auffüllen
$c = count($s);
array_pop($s);
for ($i = $c - 1; $i < 12; $i++) {
$s[] = '';
}
}
$statusline['tables'] = $s[1];
$statusline['records'] = $s[2];
$statusline['part'] = ($s[3] == '' || $s[3] == 'MP_0') ? 'MP_0' : $s[3];
$statusline['dbname'] = $s[4];
$statusline['script'] = $s[5];
$statusline['scriptversion'] = $s[6];
$statusline['comment'] = $s[7];
$statusline['mysqlversion'] = $s[8];
$statusline['flags'] = $s[9];
$statusline['sqlbefore'] = $s[10];
$statusline['sqlafter'] = $s[11];
if ((isset($s[12])) && trim($s[12]) != 'EXTINFO') {
$statusline['charset'] = $s[12];
} else {
$statusline['charset'] = '?';
}
}
//flags zerlegen
if (strlen($statusline['flags']) < 6) {
$statusline['flags'] = "2222222";
}
$statusline['complete_inserts'] = substr($statusline['flags'], 0, 1);
$statusline['extended_inserts'] = substr($statusline['flags'], 1, 1);
$statusline['ignore_inserts'] = substr($statusline['flags'], 2, 1);
$statusline['delayed_inserts'] = substr($statusline['flags'], 3, 1);
$statusline['downgrade'] = substr($statusline['flags'], 4, 1);
$statusline['lock_tables'] = substr($statusline['flags'], 5, 1);
$statusline['optimize_tables'] = substr($statusline['flags'], 6, 1);
return $statusline;
}
function NextPart($s, $first = 0, $keep_suffix = false)
{
$nf = explode('_', $s);
$i = array_search('part', $nf) + 1;
$p = substr($nf[$i], 0, strpos($nf[$i], '.'));
$ext = substr($nf[$i], strlen($p));
if ($first == 1) {
$nf[$i] = '1' . $ext;
} else {
$nf[$i] = ++$p . $ext;
}
$filename = implode('_', $nf);
return $filename;
}
function zeit_format($t)
{
global $lang;
$tt_m = floor($t / 60);
$tt_s = $t - ($tt_m * 60);
if ($tt_m < 1) {
return floor($tt_s) . ' ' . $lang['L_SECONDS'];
} else {
if ($tt_m == 1) {
return '1 ' . $lang['L_MINUTE'] . ' ' . floor($tt_s) . ' ' . $lang['L_SECONDS'];
} else {
return $tt_m . ' ' . $lang['L_MINUTES'] . ' ' . floor($tt_s) . ' ' . $lang['L_SECONDS'];
}
}
}
function TesteFTP($i)
{
global $lang, $config;
if (!isset($config['ftp_timeout'][$i])) {
$config['ftp_timeout'][$i] = 30;
}
$s = '';
if ($config['ftp_port'][$i] == '' || $config['ftp_port'][$i] == 0) {
$config['ftp_port'][$i] = 21;
}
$pass = -1;
if (!extension_loaded("ftp")) {
$s = '<br><span class="error">' . $lang['L_NOFTPPOSSIBLE'] . '</span>';
} else {
$pass = 0;
}
if ($pass == 0) {
if ($config['ftp_server'][$i] == '' || $config['ftp_user'][$i] == '') {
$s = '<br><span class="error">' . $lang['L_WRONGCONNECTIONPARS'] . '</span>';
} else {
$pass = 1;
}
}
if ($pass == 1) {
$s = $lang['L_CONNECT_TO'] . ' `' . $config['ftp_server'][$i] . '` Port ' . $config['ftp_port'][$i];
if ($config['ftp_useSSL'][$i] == 0) {
$conn_id = @ftp_connect($config['ftp_server'][$i], $config['ftp_port'][$i], $config['ftp_timeout'][$i]);
} else {
$conn_id = @ftp_ssl_connect($config['ftp_server'][$i], $config['ftp_port'][$i], $config['ftp_timeout'][$i]);
}
if ($conn_id) {
$login_result = @ftp_login($conn_id, $config['ftp_user'][$i], $config['ftp_pass'][$i]);
}
if (!$conn_id || (!$login_result)) {
$s .= '<br><span class="error">' . $lang['L_CONN_NOT_POSSIBLE'] . '</span>';
} else {
$pass = 2;
if ($config['ftp_mode'][$i] == 1) {
ftp_pasv($conn_id, true);
}
}
}
if ($pass == 2) {
$s .= '<br><strong>Login ok</strong><br>' . $lang['L_CHANGEDIR'] . ' `' . $config['ftp_dir'][$i] . '` ';
$dirc = @ftp_chdir($conn_id, $config['ftp_dir'][$i]);
if (!$dirc) {
$s .= '<br><span class="error">' . $lang['L_CHANGEDIRERROR'] . '</span>';
} else {
$pass = 3;
$s .= '<span class="success">' . $lang['L_OK'] . '</span>';
}
@ftp_close($conn_id);
}
if ($pass == 3) {
$s .= '<br><strong>' . $lang['L_FTP_OK'] . '</strong>';
}
return $s;
}
/**
* Get current MSD home path
*
* @return string
*/
function basePath()
{
$path= dirname(__FILE__) . '/../';
if (function_exists('realpath')) {
$path = realpath($path) . '/';
}
return $path;
}
// liest die Dateiliste aller vorhanden Konfigurationsfiles
function get_config_filelist()
{
global $config;
$default = $config['config_file'];
clearstatcache();
$dh = opendir($config['paths']['config']);
$r = "";
while (false !== ($filename = readdir($dh))) {
if ($filename != "." && $filename != ".." && !is_dir($config['paths']['config'] . $filename)
&& substr(
$filename,
-9
) == ".conf.php"
) {
$f = substr($filename, 0, strlen($filename) - 9);
$r .= '<option value="' . $f . '" ';
if ($f == $default) {
$r .= ' selected';
}
$r .= '>&nbsp;&nbsp;' . $f . '&nbsp;&nbsp;</option>' . "\n";
}
}
return $r;
}
function GetThemes()
{
global $config;
$default = $config['theme'];
$dh = opendir($config['paths']['root'] . "css/");
$r = "";
while (false !== ($filename = readdir($dh))) {
if ($filename != "." && $filename != ".." && is_dir($config['paths']['root'] . "css/" . $filename)
&& substr(
$filename,
0,
1
) != '.'
&& substr($filename, 0, 1) != '_'
) {
$r .= '<option value="' . $filename . '" ';
if ($filename == $default) {
$r .= ' SELECTED';
}
$r .= '>&nbsp;&nbsp;' . $filename . '&nbsp;&nbsp;</option>' . "\n";
}
}
return $r;
}
function GetLanguageCombo($k = "op", $class = "", $name = "", $start = "", $end = "")
{
global $config, $lang;
$default = $config['language'];
$dh = opendir($config['paths']['root'] . "language/");
$r = "";
$lang_files = array();
while (false !== ($filename = readdir($dh))) {
if ($filename != "." && $filename != '.svn' && $filename != ".." && $filename != "flags"
&& is_dir(
$config['paths']['root'] . "language/" . $filename
)
) {
$lang_files[$lang[$filename]] = $filename;
}
}
ksort($lang_files);
$i = 1;
foreach ($lang_files as $filename) {
if ($k == "op") {
$r .= $start . '<option value="' . $filename . '" ';
if ($filename == $default) {
$r .= ' SELECTED';
}
$r .= ' class="' . $class . '">&nbsp;&nbsp;' . $lang[$filename] . '&nbsp;&nbsp;</option>' . $end . "\n";
} elseif ($k == "radio") {
$r .= $start . '<input type="radio" class="' . $class . '" name="' . $name . '" id="l' . $i . '" value="'
. $filename . '" ';
$r .= (($filename == $default) ? "checked" : "");
$r .= ' onclick="show_tooldivs(\'' . $filename . '\');">';
$r .= '<label for="l' . $i . '">';
$r .= '&nbsp;<img src="language/flags/' . $filename . '.gif" alt="" width="25" height="15" border="0">';
$r .= '&nbsp;&nbsp;&nbsp;' . $lang[$filename] . '</label>' . $end . "\n";
}
$i++;
}
return $r;
}
// detect language subdirs and add them to the global definition of $lang
function GetLanguageArray()
{
global $config, $lang;
$dh = opendir($config['paths']['root'] . "language/");
unset($lang['languages']);
$lang['languages'] = array();
while (false !== ($filename = readdir($dh))) {
if ($filename != "." && $filename != '.svn' && $filename != ".." && $filename != "flags"
&& is_dir(
$config['paths']['root'] . "language/" . $filename
)
) {
$lang['languages'][] = $filename;
}
}
}
function headline($title, $mainframe = 1)
{
global $config, $lang;
$s = '';
if ($config['interface_server_caption'] == 1) {
if ($config['interface_server_caption_position'] == $mainframe) {
$s .= '<div id="server' . $mainframe . '">' . $lang['L_SERVER'] . ': <a class="server" href="'
. getServerProtocol() . $_SERVER['SERVER_NAME'] . '" target="_blank" title="' . $_SERVER['SERVER_NAME']
. '">' . $_SERVER['SERVER_NAME'] . '</a></div>';
}
}
if ($mainframe == 1) {
$s .= '<div id="pagetitle">' . $title . '</div>';
$s .= '<div id="content">';
}
return $s;
}
function PicCache($rpath = './')
{
global $BrowserIcon, $config;
$t = '<div style="display:none">';
$dh = opendir($config['files']['iconpath']);
while (false !== ($filename = readdir($dh))) {
if ($filename != "." && $filename != ".." && !is_dir($config['files']['iconpath'] . $filename)) {
$t .= '<img src="' . $config['files']['iconpath'] . $filename . '" width="16" height="16" alt="">' . "\n";
}
}
$t .= '</div>';
return $t;
}
function MSDHeader($kind = 0)
{
global $config;
header('Pragma: no-cache');
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: -1"); // Datum in der Vergangenheit
header('Content-Type: text/html; charset=UTF-8');
//kind 0=main 1=menu
$r = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
. "\n<html>\n<head>\n";
$r .= '<META HTTP-EQUIV="Pragma" CONTENT="no-cache">' . "\n";
$r .= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . "\n";
$r .= '<title>MySqlDumper</title>' . "\n";
$r .= '<link rel="stylesheet" type="text/css" href="css/' . $config['theme'] . '/style.css">' . "\n";
$r .= '<script language="JavaScript" src="js/script.js" type="text/javascript"></script>' . "\n";
$r .= "</head>\n<body" . (($kind == 1) ? ' class="menu-frame"' : ' class="content"') . '>';
return $r;
}
function MSDFooter($rfoot = '', $enddiv = 1)
{
/*
global $config,$databases,$dump,$restore,$lang;
if (isset($config['homepage']))
{
$f='<p id="footer">Autor: <a href="http://www.mysqldumper.de" target="_blank">
Daniel Schlichtholz</a> | Infoboard:
<a href="'.$config['homepage'].'" target="_blank">'.$config['homepage'].'</a></p>';
}
else
*/
$f = '';
if ($enddiv == 1) {
$f .= '</div>';
}
$f .= $rfoot . '</body></html>';
return $f;
}
function save_bracket($str)
{
// Wenn Klammer zu am Ende steht, diese behalten
$str = trim($str);
if (substr($str, -1) == ')') {
$str = ')';
} else {
$str = '';
}
return $str;
}
function DownGrade($s, $show = true)
{
$tmp = explode(",", $s);
//echo "<pre>";print_r($tmp);echo "</pre>";
for ($i = 0; $i < count($tmp); $i++) {
$t = strtolower($tmp[$i]);
if (strpos($t, "collate ")) {
$tmp2 = explode(" ", $tmp[$i]);
for ($j = 0; $j < count($tmp2); $j++) {
if (strtolower($tmp2[$j]) == "collate") {
$tmp2[$j] = "";
$tmp2[$j + 1] = save_bracket($tmp2[$j + 1]);
$j++;
}
}
$tmp[$i] = implode(" ", $tmp2);
}
if (strpos($t, "engine=")) {
$tmp2 = explode(" ", $tmp[$i]);
for ($j = 0; $j < count($tmp2); $j++) {
if (substr(strtoupper($tmp2[$j]), 0, 7) == "ENGINE=") {
$tmp2[$j] = "TYPE=" . substr($tmp2[$j], 7, strlen($tmp2[$j]) - 7);
}
if (substr(strtoupper($tmp2[$j]), 0, 8) == "CHARSET=") {
$tmp2[$j] = "";
$tmp2[$j - 1] = save_bracket($tmp2[$j - 1]);
}
if (substr(strtoupper($tmp2[$j]), 0, 8) == "COLLATE=") {
$tmp2[$j] = save_bracket($tmp2[$j]);
$tmp2[$j - 1] = "";
}
}
$tmp[$i] = implode(" ", $tmp2);
}
// character Set sprache entfernen
if (strpos($t, "character set")) {
$tmp2 = explode(" ", $tmp[$i]);
$end = false;
for ($j = 0; $j < count($tmp2); $j++) {
if (strtolower($tmp2[$j]) == "character") {
$tmp2[$j] = '';
$tmp2[$j + 1] = save_bracket($tmp2[$j + 1]);
$tmp2[$j + 2] = save_bracket($tmp2[$j + 2]);
}
}
$tmp[$i] = implode(" ", $tmp2);
}
if (strpos($t, "timestamp")) {
$tmp2 = explode(" ", $tmp[$i]);
$end = false;
for ($j = 0; $j < count($tmp2); $j++) {
if ($end) {
$tmp2[$j] = "";
}
if (strtolower($tmp2[$j]) == "timestamp") {
$tmp2[$j] = "TIMESTAMP(14)";
$end = true;
}
}
$tmp[$i] = implode(" ", $tmp2);
}
}
$t = implode(",", $tmp);
if (substr(rtrim($t), -1) != ";") {
$t = rtrim($t) . ";";
}
return $t;
}
function MySQL_Ticks($s)
{
$klammerstart = $lastklammerstart = $end = 0;
$inner_s_start = strpos($s, '(');
$inner_s_end = strrpos($s, ')');
$inner_s = substr($s, $inner_s_start + 1, $inner_s_end - (1 + $inner_s_start));
$pieces = explode(',', $inner_s);
for ($i = 0; $i < count($pieces); $i++) {
$r = trim($pieces[$i]);
$klammerstart += substr_count($r, "(") - substr_count($r, ")");
if ($i == count($pieces) - 1) {
$klammerstart += 1;
}
if (substr(strtoupper($r), 0, 4) == "KEY " || substr(strtoupper($r), 0, 7) == "UNIQUE "
|| substr(
strtoupper($r),
0,
12
) == "PRIMARY KEY "
|| substr(strtoupper($r), 0, 13) == "FULLTEXT KEY "
) {
//nur ein Key
$end = 1;
} else {
if (substr($r, 0, 1) != '`' && substr($r, 0, 1) != '\'' && $klammerstart == 0 && $end == 0
&& $lastklammerstart == 0
) {
$pos = strpos($r, ' ');
$r = '`' . substr($r, 0, $pos) . '`' . substr($r, $pos);
}
}
$pieces[$i] = $r;
$lastklammerstart = $klammerstart;
}
$back = substr($s, 0, $inner_s_start + 1) . implode(',', $pieces) . ');';
return $back;
}
/**
* Convert all array elements to UTF-8
*
* @param $array
*
* @return array
*/
function convert_to_utf8($obj)
{
global $config;
$ret = $obj;
// wenn die Verbindung zur Datenbank nicht auf utf8 steht, dann muessen die Rückgaben in utf8 gewandelt werden,
// da die Webseite utf8-kodiert ist
if (!isset($config['mysql_can_change_encoding'])) {
get_sql_encodings();
}
if ($config['mysql_can_change_encoding'] == false && $config['mysql_standard_character_set'] != 'utf8') {
if (is_array($obj)) {
foreach ($obj as $key => $val) {
//echo "<br> Wandle " . $val . " nach ";
$obj[$key] = utf8_encode($val);
//echo $obj[$key];
}
}
if (is_string($obj)) {
$obj = utf8_encode($obj);
}
$ret = $obj;
}
return $ret;
}
/**
* Convert all array elements to Latin1
*
* @param $array
*
* @return array
*/
function convert_to_latin1($obj)
{
global $config;
$ret = $obj;
// wenn die Verbindung zur Datenbank nicht auf utf8 steht, dann muessen die Rückgaben in utf8 gewandelt werden,
// da die Webseite utf8-kodiert ist
if ($config['mysql_can_change_encoding'] == false && $config['mysql_standard_character_set'] != 'utf8') {
if (is_array($obj)) {
foreach ($obj as $key => $val) {
$obj[$key] = utf8_decode($val);
}
}
if (is_string($obj)) {
$obj = utf8_decode($obj);
}
$ret = $obj;
}
return $ret;
}
// returns the index of the selected val in an optionlist
function get_index($arr, $selected)
{
$ret = false; // return false if not found
foreach ($arr as $key => $val) {
if (strtolower(substr($val, 0, strlen($selected))) == strtolower($selected)) {
$ret = $key;
break;
}
}
return $ret;
}
/**
* Check if config is readable
*
* @param $file
*
* @return boolean
*/
function read_config($file = false)
{
global $config, $databases;
$ret = false;
if (!$file) {
$file = $config['config_file'];
}
// protect from including external files
$search = array(':', 'http', 'ftp', ' ');
$replace = array('', '', '', '');
$file = str_replace($search, $replace, $file);
if (is_readable($config['paths']['config'] . $file . '.php')) {
// to prevent modern server from caching the new configuration we need to evaluate it this way
clearstatcache();
$f = implode('', file($config['paths']['config'] . $file . '.php'));
$f = str_replace('<?php', '', $f);
$f = str_replace('?>', '', $f);
eval($f);
$config['config_file'] = $file;
$_SESSION['config_file'] = $config['config_file'];
$ret = true;
}
return $ret;
}
/**
* Get all work configurations from /work/config directory
*
* @return array
*/
function get_config_filenames()
{
global $config;
$configs = array();
$dh = opendir($config['paths']['config'] . "/");
while (false !== ($filename = readdir($dh))) {
if (substr($filename, -4) == '.php' && substr($filename, -9) != '.conf.php' && $filename != 'dbs_manual.php') {
$configs[] = substr($filename, 0, -4);
}
}
return $configs;
}
function table_output($text, $val, $small = false, $colspan = 1)
{
$ret = '<tr>';
$ret .= '<td nowrap="nowrap"';
if ($colspan > 1) {
$ret .= ' colspan="' . $colspan . '"';
}
$ret .= '>' . $text;
if ($colspan == 1) {
$ret .= ': ';
} else {
$ret .= '&nbsp;';
}
if ($colspan == 1) {
$ret .= '</td><td nowrap="nowrap">';
}
if ($small) {
$ret .= '<span class="small">' . $val . '</span></td></tr>';
} else {
$ret .= '<strong>' . $val . '</strong></td></tr>';
}
return $ret;
}
/**
* Receive all possible MySQL character sets and save standard to $config['mysql_standard_charset']
*/
function get_sql_encodings()
{
global $config;
unset($config['mysql_possible_character_sets']);
if (!isset($config['dbconnection'])) {
MSD_mysql_connect();
}
$erg = false;
$config['mysql_standard_character_set'] = '';
$config['mysql_possible_character_sets'] = array();
if (!defined('MSD_MYSQL_VERSION')) {
GetMySQLVersion();
}
$v = explode('.', MSD_MYSQL_VERSION);
$config['mysql_can_change_encoding'] = false;
if (($v[0] <= 4 && $v[1] < 1) || $v[0] <= 3) {
// MySQL < 4.1
$config['mysql_can_change_encoding'] = false;
$sqlt = 'SHOW VARIABLES LIKE \'character_set%\'';
$res = MSD_query($sqlt) or die(SQLError(
$sqlt,
((is_object($GLOBALS["___mysqli_ston"]))
? mysqli_error($GLOBALS["___mysqli_ston"])
: (($___mysqli_res
= mysqli_connect_error()) ? $___mysqli_res : false))
));
if ($res) {
WHILE ($row = mysqli_fetch_row($res)) {
if ($row[0] == 'character_set') {
$config['mysql_standard_character_set'] = $row[1];
if ($v[0] == 3) {
$config['mysql_possible_character_sets'][0] = $row[1];
}
}
if ($row[0] == 'character_sets' && $v[0] > 3) {
$config['mysql_possible_character_sets'] = explode(' ', $row[1]);
sort($config['mysql_possible_character_sets']);
}
}
}
} else {
// MySQL-Version >= 4.1
$config['mysql_can_change_encoding'] = true;
$sqlt = 'SHOW CHARACTER SET';
$res = MSD_query($sqlt) or die(SQLError(
$sqlt,
((is_object($GLOBALS["___mysqli_ston"]))
? mysqli_error($GLOBALS["___mysqli_ston"])
: (($___mysqli_res
= mysqli_connect_error()) ? $___mysqli_res : false))
));
if ($res) {
WHILE ($row = mysqli_fetch_row($res)) {
$config['mysql_possible_character_sets'][] = $row[0] . ' - ' . $row[1];
}
sort($config['mysql_possible_character_sets']);
}
$sqlt = 'SHOW VARIABLES LIKE \'character_set_connection\'';
$res = MSD_query($sqlt) or die(SQLError(
$sqlt,
((is_object($GLOBALS["___mysqli_ston"]))
? mysqli_error($GLOBALS["___mysqli_ston"])
: (($___mysqli_res
= mysqli_connect_error()) ? $___mysqli_res : false))
));
if ($res) {
WHILE ($row = mysqli_fetch_row($res)) {
$config['mysql_standard_character_set'] = $row[1];
}
}
}
}
/**
* Un-quotes a quoted string/array
*
* @param $value
*
* @return string/array
*/
function stripslashes_deep($value)
{
$value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
return $value;
}
/**
* Remove whitespaces before and after an string or array
*
* @param $value
*
* @return string/array
*/
function trim_deep($value)
{
$value = is_array($value) ? array_map('trim_deep', $value) : trim($value);
return $value;
}
/**
* load external source from given URL and save content locally
*
* loads content from an external URL and saves it locally in $path with the name $local_file
* return false on failure or true on success
*
* @param $url
* @param $file
* @param local_file
* @param $path
*
* @return boolean
*/
function fetchFileFromURL($url, $file, $local_path = './data/', $local_file)
{
$data = fetchFileDataFromURL($url . $file);
if ($data) {
$d = fopen($local_path . $local_file, "wb");
$ret = fwrite($d, $data);
fclose($d);
return $ret;
}
return false;
}
/**
* Loads data from an external source via HTTP-socket
*
* Loads data from an external source $url given as URL
* and returns the content as a binary string or an empty string on failure
*
* @param $url
*
* @return string file data
*/
function fetchFileDataFromURL($url)
{
$url_parsed = parse_url($url);
$in = '';
$host = $url_parsed['host'];
$port = isset($url_parsed['port']) ? intval($url_parsed['port']) : 80;
if ($port == 0) {
$port = 80;
}
$path = $url_parsed['path'];
if (isset($url_parsed['query']) && $url_parsed['query'] != '') {
$path .= '?' . $url_parsed['query'];
}
$fp = fsockopen($host, $port, $errno, $errstr, 3);
if ($fp) {
$out = "GET $path HTTP/1.1\r\nHost: $host\r\n";
$out .= "Connection: close\r\n\r\n";
fwrite($fp, $out);
$body = false;
while (!feof($fp)) {
$s = fgets($fp, 1024);
if ($body) {
$in .= $s;
}
if ($s == "\r\n") {
$body = true;
}
}
fclose($fp);
}
return $in;
}
?>