2015-05-22 11:43:20 +00:00
< ? php
include ( './inc/functions_global.php' );
//Buffer fuer Multipart-Filesizepruefung
$buffer = 10 * 1024 ;
function new_file ( $last_groesse = 0 )
{
global $dump , $databases , $config , $out , $lang , $nl , $mysql_commentstring ;
// Dateiname aus Datum und Uhrzeit bilden
if ( $dump [ 'part' ] - $dump [ 'part_offset' ] == 1 ) $dump [ 'filename_stamp' ] = date ( " Y_m_d_H_i " , time ());
if ( $config [ 'multi_part' ] == 1 )
{
$dateiname = $databases [ 'Name' ][ $dump [ 'dbindex' ]] . '_' . $dump [ 'filename_stamp' ] . '_part_' . ( $dump [ 'part' ] - $dump [ 'part_offset' ]);
}
else
$dateiname = $databases [ 'Name' ][ $dump [ 'dbindex' ]] . '_' . date ( " Y_m_d_H_i " , time ());
$endung = ( $config [ 'compression' ]) ? '.sql.gz' : '.sql' ;
$dump [ 'backupdatei' ] = $dateiname . $endung ;
if ( file_exists ( $config [ 'paths' ][ 'backup' ] . $dump [ 'backupdatei' ])) unlink ( $config [ 'paths' ][ 'backup' ] . $dump [ 'backupdatei' ]);
$cur_time = date ( " Y-m-d H:i " );
$statuszeile = GetStatusLine () . $nl . $mysql_commentstring . ' Dump by MySQLDumper ' . MSD_VERSION . ' (' . $config [ 'homepage' ] . ')' . $nl ;
$statuszeile .= '/*!40101 SET NAMES \'' . $dump [ 'dump_encoding' ] . '\' */;' . $nl ;
$statuszeile .= 'SET FOREIGN_KEY_CHECKS=0;' . $nl ;
if ( $dump [ 'part' ] - $dump [ 'part_offset' ] == 1 )
{
if ( $config [ 'multi_part' ] == 0 )
{
if ( $config [ 'multi_dump' ] == 1 && $dump [ 'dbindex' ] == 0 ) WriteLog ( 'starting Multidump with ' . count ( $databases [ 'multi' ]) . ' Datenbases.' );
WriteLog ( 'Start Dump \'' . $dump [ 'backupdatei' ] . '\'' );
}
else
WriteLog ( 'Start Multipart-Dump \'' . $dateiname . '\'' );
$out .= '<strong>' . $lang [ 'L_STARTDUMP' ] . ' `' . $databases [ 'Name' ][ $dump [ 'dbindex' ]] . '`</strong>' . (( $databases [ 'praefix' ][ $dump [ 'dbindex' ]] != " " ) ? ' (' . $lang [ 'L_WITHPRAEFIX' ] . ' <span style="color:blue">' . $databases [ 'praefix' ][ $dump [ 'dbindex' ]] . '</span>)' : '' ) . '... ' ;
if ( $dump [ 'part' ] == 1 )
{
$dump [ 'table_offset' ] = 0 ;
$dump [ 'countdata' ] = 0 ;
}
// Seitenerstaufruf -> Backupdatei anlegen
$dump [ 'data' ] = $statuszeile . $mysql_commentstring . ' Dump created: ' . $cur_time ;
}
else
{
if ( $config [ 'multi_part' ] != 0 )
{
WriteLog ( 'Continue Multipart-Dump with File ' . ( $dump [ 'part' ] - $dump [ 'part_offset' ]) . ' (last file was ' . $last_groesse . ' Bytes)' );
$dump [ 'data' ] = $statuszeile . $mysql_commentstring . ' This is part ' . ( $dump [ 'part' ] - $dump [ 'part_offset' ]) . ' of the backup.' . $nl . $nl . $dump [ 'data' ];
}
}
WriteToDumpFile ();
$dump [ 'part' ] ++ ;
}
function GetStatusLine ( $kind = " php " )
{
/* AUFBAU der Statuszeile :
-- Status : tabellenzahl : datensätze : Multipart : Datenbankname : script : scriptversion : Kommentar : MySQLVersion : Backupflags : SQLBefore : SQLAfter : Charset : CharsetEXTINFO
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 $databases , $config , $lang , $dump , $mysql_commentstring ;
$t_array = explode ( " | " , $databases [ 'db_actual_tableselected' ]);
$t = 0 ;
$r = 0 ;
$t_zeile = " $mysql_commentstring\n $mysql_commentstring TABLE-INFO \r \n " ;
MSD_mysql_connect ();
2016-02-01 19:02:15 +00:00
$res = mysqli_query ( $GLOBALS [ " ___mysqli_ston " ], " SHOW TABLE STATUS FROM ` " . $databases [ 'Name' ][ $dump [ 'dbindex' ]] . " ` " );
$numrows = intval ( @ mysqli_num_rows ( $res ));
2015-05-22 11:43:20 +00:00
for ( $i = 0 ; $i < $numrows ; $i ++ )
{
2016-02-01 19:02:15 +00:00
$erg = mysqli_fetch_array ( $res );
2015-05-22 11:43:20 +00:00
// Get nr of records -> need to do it this way because of incorrect returns when using InnoDBs
$sql_2 = " SELECT count(*) as `count_records` FROM ` " . $databases [ 'Name' ][ $dump [ 'dbindex' ]] . " `.` " . $erg [ 'Name' ] . " ` " ;
2016-02-01 19:02:15 +00:00
$res2 =@ mysqli_query ( $GLOBALS [ " ___mysqli_ston " ], $sql_2 );
2015-05-22 11:43:20 +00:00
if ( $res2 === false )
{
// error reading table definition
2016-02-01 19:02:15 +00:00
$read_create_error = sprintf ( $lang [ 'L_FATAL_ERROR_DUMP' ], $databases [ 'Name' ][ $dump [ 'dbindex' ]], $erg [ 'Name' ]) . ': ' . (( is_object ( $config [ 'dbconnection' ])) ? mysqli_error ( $config [ 'dbconnection' ]) : (( $___mysqli_res = mysqli_connect_error ()) ? $___mysqli_res : false ));
2015-05-22 11:43:20 +00:00
Errorlog ( " DUMP " , $databases [ 'Name' ][ $dump [ 'dbindex' ]], '' , $read_create_error , 0 );
WriteLog ( $read_create_error );
if ( $config [ 'stop_with_error' ] > 0 )
{
die ( $read_create_error );
}
$dump [ 'errors' ] ++ ;
//$i++; // skip corrupted table
}
else
{
2016-02-01 19:02:15 +00:00
$row2 = mysqli_fetch_array ( $res2 );
2015-05-22 11:43:20 +00:00
$erg [ 'Rows' ] = $row2 [ 'count_records' ];
if (( $databases [ 'db_actual_tableselected' ] == '' || ( $databases [ 'db_actual_tableselected' ] != '' && ( in_array ( $erg [ 0 ], $t_array )))) && ( substr ( $erg [ 0 ], 0 , strlen ( $databases [ 'praefix' ][ $dump [ 'dbindex' ]])) == $databases [ 'praefix' ][ $dump [ 'dbindex' ]]))
{
$t ++ ;
$r += $erg [ 'Rows' ];
if ( isset ( $erg [ 'Type' ])) $erg [ 'Engine' ] = $erg [ 'Type' ];
$t_zeile .= " $mysql_commentstring TABLE| " . $erg [ 'Name' ] . '|' . $erg [ 'Rows' ] . '|' . ( $erg [ 'Data_length' ] + $erg [ 'Index_length' ]) . '|' . $erg [ 'Update_time' ] . '|' . $erg [ 'Engine' ] . " \n " ;
}
}
}
//$dump['totalrecords']=$r;
$flags = 1 ;
$mp = ( $config [ 'multi_part' ] == 1 ) ? $mp = " MP_ " . ( $dump [ 'part' ] - $dump [ 'part_offset' ]) : 'MP_0' ;
$statusline = " $mysql_commentstring Status: $t : $r : $mp : " . $databases [ 'Name' ][ $dump [ 'dbindex' ]] . " : $kind : " . MSD_VERSION . " : " . $dump [ 'kommentar' ] . " : " ;
$statusline .= MSD_MYSQL_VERSION . " : $flags ::: " . $dump [ 'dump_encoding' ] . " :EXTINFO \n " . $t_zeile . " $mysql_commentstring " . " EOF TABLE-INFO \n $mysql_commentstring " ;
return $statusline ;
}
// Liest die Eigenschaften der Tabelle aus der DB und baut die CREATE-Anweisung zusammen
function get_def ( $db , $table , $withdata = 1 )
{
global $config , $nl , $mysql_commentstring , $dump ;
$def = " \n \n $mysql_commentstring\n $mysql_commentstring Create Table ` $table ` \n $mysql_commentstring\n\n " ;
if ( $dump [ 'table_types' ][ getDBIndex ( $db , $table )] == 'VIEW' )
{
$def .= " DROP VIEW IF EXISTS ` $table `; \n " ;
$withdata = 0 ;
}
else
$def .= " DROP TABLE IF EXISTS ` $table `; \n " ;
2016-02-01 19:02:15 +00:00
(( bool ) mysqli_query ( $GLOBALS [ " ___mysqli_ston " ], " USE " . $db ));
$result = mysqli_query ( $config [ 'dbconnection' ], 'SHOW CREATE TABLE `' . $table . '`' );
$row =@ mysqli_fetch_row ( $result );
2015-05-22 11:43:20 +00:00
if ( $row === false ) return false ;
$def .= $row [ 1 ] . ';' . " \n \n " ;
if ( $withdata == 1 )
{
$def .= " $mysql_commentstring\n $mysql_commentstring Data for Table ` $table ` \n $mysql_commentstring\n\n " ;
$def .= " /*!40000 ALTER TABLE ` $table ` DISABLE KEYS */; " . $nl ;
}
return $def ;
}
// Liest die Daten aus der DB aus und baut die INSERT-Anweisung zusammen
function get_content ( $db , $table )
{
global $config , $nl , $dump , $buffer ;
$content = '' ;
$complete = Fieldlist ( $db , $table ) . ' ' ;
$table_ready = 0 ;
$query = 'SELECT * FROM `' . $table . '` LIMIT ' . $dump [ 'zeilen_offset' ] . ',' . ( $dump [ 'restzeilen' ] + 1 );
2016-02-01 19:02:15 +00:00
(( bool ) mysqli_query ( $GLOBALS [ " ___mysqli_ston " ], " USE " . $db ));
$result = mysqli_query ( $config [ 'dbconnection' ], $query );
$ergebnisse =@ mysqli_num_rows ( $result );
2015-05-22 11:43:20 +00:00
if ( $ergebnisse !== false )
{
2016-02-01 19:02:15 +00:00
$num_felder = (( $___mysqli_tmp = mysqli_num_fields ( $result )) ? $___mysqli_tmp : false );
2015-05-22 11:43:20 +00:00
$first = 1 ;
if ( $ergebnisse > $dump [ 'restzeilen' ])
{
$dump [ 'zeilen_offset' ] += $dump [ 'restzeilen' ];
$ergebnisse -- ;
$dump [ 'restzeilen' ] = 0 ;
}
else
{
$dump [ 'table_offset' ] ++ ;
$dump [ 'zeilen_offset' ] = 0 ;
$dump [ 'restzeilen' ] = $dump [ 'restzeilen' ] - $ergebnisse ;
$table_ready = 1 ;
}
$ax = 0 ;
for ( $x = 0 ; $x < $ergebnisse ; $x ++ )
{
2016-02-01 19:02:15 +00:00
$row = mysqli_fetch_row ( $result );
2015-05-22 11:43:20 +00:00
$ax ++ ;
$insert = 'INSERT INTO `' . $table . '` ' . $complete . 'VALUES (' ;
for ( $j = 0 ; $j < $num_felder ; $j ++ )
{
if ( ! isset ( $row [ $j ])) $insert .= 'NULL,' ;
else
2016-02-01 19:02:15 +00:00
if ( $row [ $j ] != '' ) $insert .= '\'' . (( isset ( $GLOBALS [ " ___mysqli_ston " ]) && is_object ( $GLOBALS [ " ___mysqli_ston " ])) ? mysqli_real_escape_string ( $GLOBALS [ " ___mysqli_ston " ], $row [ $j ]) : (( trigger_error ( " [MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work. " , E_USER_ERROR )) ? " " : " " )) . '\',' ;
2015-05-22 11:43:20 +00:00
else
$insert .= '\'\',' ;
}
$insert = substr ( $insert , 0 , - 1 ) . ');' . $nl ;
$dump [ 'data' ] .= $insert ;
$dump [ 'countdata' ] ++ ;
if ( strlen ( $dump [ 'data' ]) > $config [ 'memory_limit' ] || ( $config [ 'multi_part' ] == 1 && strlen ( $dump [ 'data' ]) + $buffer > $config [ 'multipart_groesse' ]))
{
WriteToDumpFile ();
}
}
if ( $table_ready == 1 && $dump [ 'table_types' ][ getDBIndex ( $db , $table )] != 'VIEW' ) $dump [ 'data' ] .= " /*!40000 ALTER TABLE ` $table ` ENABLE KEYS */; \n " ;
}
else
{
// table corrupt -> skip it
$dump [ 'table_offset' ] ++ ;
$dump [ 'zeilen_offset' ] = 0 ;
$dump [ 'restzeilen' ] = $dump [ 'restzeilen' ] - $ergebnisse ;
$dump [ 'data' ] .= " /*!40000 ALTER TABLE ` $table ` ENABLE KEYS */; \n " ;
if ( strlen ( $dump [ 'data' ]) > $config [ 'memory_limit' ] || ( $config [ 'multi_part' ] == 1 && strlen ( $dump [ 'data' ]) + $buffer > $config [ 'multipart_groesse' ]))
{
WriteToDumpFile ();
}
}
2016-02-01 19:02:15 +00:00
@ (( mysqli_free_result ( $result ) || ( is_object ( $result ) && ( get_class ( $result ) == " mysqli_result " ))) ? true : false );
2015-05-22 11:43:20 +00:00
}
function WriteToDumpFile ()
{
global $config , $dump , $buffer ;
$dump [ 'filesize' ] = 0 ;
$df = $config [ 'paths' ][ 'backup' ] . $dump [ 'backupdatei' ];
if ( $config [ 'compression' ] == 1 )
{
if ( $dump [ 'data' ] != '' )
{
$fp = gzopen ( $df , 'ab' );
gzwrite ( $fp , $dump [ 'data' ]);
gzclose ( $fp );
}
}
else
{
if ( $dump [ 'data' ] != '' )
{
$fp = fopen ( $df , 'ab' );
fwrite ( $fp , $dump [ 'data' ]);
fclose ( $fp );
}
}
$dump [ 'data' ] = '' ;
if ( ! isset ( $dump [ 'fileoperations' ])) $dump [ 'fileoperations' ] = 0 ;
$dump [ 'fileoperations' ] ++ ;
if ( $config [ 'multi_part' ] == 1 ) clearstatcache ();
$dump [ 'filesize' ] = filesize ( $df );
if ( $config [ 'multi_part' ] == 1 && $dump [ 'filesize' ] + $buffer > $config [ 'multipart_groesse' ])
{
@ chmod ( $df , 0777 );
new_file ( $dump [ 'filesize' ]); // Wenn maximale Dateigroesse erreicht -> neues File starten
}
}
function ExecuteCommand ( $when )
{
global $config , $databases , $dump , $out , $lang ;
$lf = '<br>' ;
if ( ! isset ( $dump [ 'dbindex' ])) return ;
if ( $when == 'b' )
{ // before dump
$cd = $databases [ 'command_before_dump' ][ $dump [ 'dbindex' ]];
//WriteLog('DbIndex: '.$dump['dbindex'].' Before: '.$databases['command_before_dump'][$dump['dbindex']]);
}
else
{
$cd = $databases [ 'command_after_dump' ][ $dump [ 'dbindex' ]];
//WriteLog('DbIndex: '.$dump['dbindex'].' After: '.$databases['command_after_dump'][$dump['dbindex']]);
}
if ( $cd != '' )
{
//jetzt ausführen
if ( substr ( strtolower ( $cd ), 0 , 7 ) != 'system:' )
{
$cad = array ();
2016-02-01 19:02:15 +00:00
@ (( bool ) mysqli_query ( $GLOBALS [ " ___mysqli_ston " ], " USE " . $databases [ 'Name' ][ $dump [ 'dbindex' ]]));
2015-05-22 11:43:20 +00:00
if ( strpos ( $cd , ';' ))
{
$cad = explode ( ';' , $cd );
}
else
$cad [ 0 ] = $cd ;
for ( $i = 0 ; $i < sizeof ( $cad ); $i ++ )
{
if ( trim ( $cad [ $i ]) > '' )
{
2016-02-01 19:02:15 +00:00
$result =@ mysqli_query ( $config [ 'dbconnection' ], $cad [ $i ]);
2015-05-22 11:43:20 +00:00
if ( $result === false )
{
2016-02-01 19:02:15 +00:00
WriteLog ( " Error executing Query ' $cad[$i] '! MySQL returns: " . trim ((( is_object ( $GLOBALS [ " ___mysqli_ston " ])) ? mysqli_error ( $GLOBALS [ " ___mysqli_ston " ]) : (( $___mysqli_res = mysqli_connect_error ()) ? $___mysqli_res : false ))));
ErrorLog ( " Error executing Query ' $cad[$i] '! " , $databases [ 'Name' ][ $dump [ 'dbindex' ]], $cad [ $i ],(( is_object ( $GLOBALS [ " ___mysqli_ston " ])) ? mysqli_error ( $GLOBALS [ " ___mysqli_ston " ]) : (( $___mysqli_res = mysqli_connect_error ()) ? $___mysqli_res : false )), 0 );
2015-05-22 11:43:20 +00:00
$dump [ 'errors' ] ++ ;
$out .= '<span class="error">Error executing Query ' . $cad [ $i ] . '</span>' . $lf ;
}
else
{
WriteLog ( " Successfully executed Query: ' $cad[$i] ' " );
$out .= '<span class="success">Successfully executed Query: \'' . $cad [ $i ] . '\'</span>' . $lf ;
}
}
}
}
elseif ( substr ( strtolower ( $cd ), 0 , 7 ) == " system: " )
{
$command = substr ( $cd , 7 );
$result =@ system ( $command , $returnval );
if ( ! $result )
{
WriteLog ( " Error while executing System Command ' $command ' " );
$dump [ 'errors' ] ++ ;
$out .= $lf . '<span class="error">ERROR executing System Command \'' . $ommand . '\'</span><br>' ;
}
else
{
WriteLog ( " Successfully executed System Command ' $command '. [ $returnval ] " );
$out .= $lf . '<span class="success">Successfully executed System Command \'' . $ommand . '.</span><br>' ;
}
}
}
}
function DoEmail ()
{
global $config , $dump , $databases , $email , $lang , $out , $REMOTE_ADDR ;
$header = " " ;
if ( $config [ 'cron_use_sendmail' ] == 1 )
{
//sendmail
if ( ini_get ( " sendmail_path " ) != $config [ 'cron_sendmail' ]) @ ini_set ( " SMTP " , $config [ 'cron_sendmail' ]);
if ( ini_get ( " sendmail_from " ) != $config [ 'email_sender' ]) @ ini_set ( " SMTP " , $config [ 'email_sender' ]);
}
else
{
//SMTP
}
if ( ini_get ( " SMTP " ) != $config [ 'cron_smtp' ]) @ ini_set ( " SMTP " , $config [ 'cron_smtp' ]);
if ( ini_get ( " smtp_port " ) != 25 ) @ ini_set ( " smtp_port " , 25 );
if ( $config [ 'multi_part' ] == 0 )
{
$file = $dump [ 'backupdatei' ];
$file_name = ( strpos ( " / " , $file )) ? substr ( $file , strrpos ( " / " , $file )) : $file ;
$file_type = filetype ( $config [ 'paths' ][ 'backup' ] . $file );
$file_size = filesize ( $config [ 'paths' ][ 'backup' ] . $file );
if (( $config [ 'email_maxsize' ] > 0 && $file_size > $config [ 'email_maxsize' ]) || $config [ 'send_mail_dump' ] == 0 )
{
//anhang zu gross
$subject = " Backup ' " . $databases [ 'Name' ][ $dump [ 'dbindex' ]] . " ' - " . date ( " d \ .m \ .Y H:i " , time ());
$header .= " FROM: " . $config [ 'email_sender' ] . " \n " ;
if ( isset ( $config [ 'email_recipient_cc' ]) && trim ( $config [ 'email_recipient_cc' ]) > '' ) $header .= " Cc: " . $config [ 'email_recipient_cc' ] . " \r \n " ;
$header .= " MIME-version: 1.0 \n " ;
$header .= " X-Mailer: PHP/ " . phpversion () . " \n " ;
$header .= " X-Sender-IP: $REMOTE_ADDR\n " ;
$header .= " Content-Type: text/html; charset=utf-8 \n " ;
if ( $config [ 'send_mail_dump' ] != 0 )
{
$msg_body = sprintf ( addslashes ( $lang [ 'L_EMAILBODY_TOOBIG' ]), byte_output ( $config [ 'email_maxsize' ]), $databases [ 'Name' ][ $dump [ 'dbindex' ]], " $file ( " . byte_output ( filesize ( $config [ 'paths' ][ 'backup' ] . $file )) . " )<br> " );
}
else
{
$msg_body = sprintf ( addslashes ( $lang [ 'L_EMAILBODY_NOATTACH' ]), $databases [ 'Name' ][ $dump [ 'dbindex' ]], " $file ( " . byte_output ( filesize ( $config [ 'paths' ][ 'backup' ] . $file )) . " ) " );
}
include_once ( './inc/functions.php' );
$msg_body .= '<a href="' . getServerProtocol () . $_SERVER [ 'HTTP_HOST' ] . substr ( $_SERVER [ " PHP_SELF " ], 0 , strrpos ( $_SERVER [ " PHP_SELF " ], " / " )) . '/' . $config [ 'paths' ][ 'backup' ] . $file . '">' . $file . '</a>' ;
$email_log = " Email sent to ' " . $config [ 'email_recipient' ] . " ' " ;
$email_out = $lang [ 'L_EMAIL_WAS_SEND' ] . " ` " . $config [ 'email_recipient' ] . " `<br> " ;
}
else
{
//alles ok, anhang generieren
$msg_body = sprintf ( addslashes ( $lang [ 'L_EMAILBODY_ATTACH' ]), $databases [ 'Name' ][ $dump [ 'dbindex' ]], " $file ( " . byte_output ( filesize ( $config [ 'paths' ][ 'backup' ] . $file )) . " ) " );
$subject = " Backup ' " . $databases [ 'Name' ][ $dump [ 'dbindex' ]] . " ' - " . date ( " d \ .m \ .Y " , time ());
$fp = fopen ( $config [ 'paths' ][ 'backup' ] . $file , " r " );
$contents = fread ( $fp , $file_size );
$encoded_file = chunk_split ( base64_encode ( $contents ));
fclose ( $fp );
$header .= " FROM: " . $config [ 'email_sender' ] . " \n " ;
if ( isset ( $config [ 'email_recipient_cc' ]) && trim ( $config [ 'email_recipient_cc' ]) > '' ) $header .= " Cc: " . $config [ 'email_recipient_cc' ] . " \r \n " ;
$header .= " MIME-version: 1.0 \n " ;
$header .= " Content-type: multipart/mixed; " ;
$header .= " boundary= \" Message-Boundary \" \n " ;
$header .= " Content-transfer-encoding: 7BIT \n " ;
$header .= " X-attachments: $file_name " ;
$body_top = " --Message-Boundary \n " ;
$body_top .= " Content-type: text/html; charset=utf-8 \n " ;
$body_top .= " Content-transfer-encoding: 7BIT \n " ;
$body_top .= " Content-description: Mail message body \n \n " ;
$msg_body = $body_top . $msg_body ;
$msg_body .= " \n \n --Message-Boundary \n " ;
$msg_body .= " Content-type: $file_type ; name= \" $file\ " \n " ;
$msg_body .= " Content-Transfer-Encoding: BASE64 \n " ;
$msg_body .= " Content-disposition: attachment; filename= \" $file\ " \n\n " ;
$msg_body .= " $encoded_file\n " ;
$msg_body .= " --Message-Boundary-- \n " ;
$email_log = " Email was sent to ' " . $config [ 'email_recipient' ] . " ' with ' " . $dump [ 'backupdatei' ] . " '. " ;
$email_out = $lang [ 'L_EMAIL_WAS_SEND' ] . " ` " . $config [ 'email_recipient' ] . " ` " . $lang [ 'L_WITH' ] . " ` " . $dump [ 'backupdatei' ] . " `.<br> " ;
}
}
else
{
//Multipart
$mp_sub = " Backup ' " . $databases [ 'Name' ][ $dump [ 'dbindex' ]] . " ' - " . date ( " d \ .m \ .Y " , time ());
$subject = $mp_sub ;
$header .= " FROM: " . $config [ 'email_sender' ] . " \n " ;
if ( isset ( $config [ 'email_recipient_cc' ]) && trim ( $config [ 'email_recipient_cc' ]) > '' ) $header .= " Cc: " . $config [ 'email_recipient_cc' ] . " \r \n " ;
$header .= " MIME-version: 1.0 \n " ;
$header .= " X-Mailer: PHP/ " . phpversion () . " \n " ;
$header .= " X-Sender-IP: $REMOTE_ADDR\n " ;
$header .= " Content-Type: text/html; charset=utf-8 " ;
$dateistamm = substr ( $dump [ 'backupdatei' ], 0 , strrpos ( $dump [ 'backupdatei' ], " part_ " )) . " part_ " ;
$dateiendung = ( $config [ 'compression' ] == 1 ) ? " .sql.gz " : " .sql " ;
$mpdatei = Array ();
$mpfiles = " " ;
for ( $i = 1 ; $i < ( $dump [ 'part' ] - $dump [ 'part_offset' ]); $i ++ )
{
$mpdatei [ $i - 1 ] = $dateistamm . $i . $dateiendung ;
$sz = byte_output ( @ filesize ( $config [ 'paths' ][ 'backup' ] . $mpdatei [ $i - 1 ]));
$mpfiles .= $mpdatei [ $i - 1 ] . " ( " . $sz . " )<br> " ;
}
$msg_body = ( $config [ 'send_mail_dump' ] == 1 ) ? sprintf ( addslashes ( $lang [ 'L_EMAILBODY_MP_ATTACH' ]), $databases [ 'Name' ][ $dump [ 'dbindex' ]], $mpfiles ) : sprintf ( addslashes ( $lang [ 'L_EMAILBODY_MP_NOATTACH' ]), $databases [ 'Name' ][ $dump [ 'dbindex' ]], $mpfiles );
$email_log = " Email was sent to ' " . $config [ 'email_recipient' ] . " ' " ;
$email_out = $lang [ 'L_EMAIL_WAS_SEND' ] . " ` " . $config [ 'email_recipient' ] . " `<br> " ;
}
if ( @ mail ( $config [ 'email_recipient' ], stripslashes ( $subject ), $msg_body , $header ))
{
$out .= '<span class="success">' . $email_out . '</span>' ;
WriteLog ( " $email_log " );
}
else
{
$out .= '<span class="error">' . $lang [ 'L_MAILERROR' ] . '</span><br>' ;
WriteLog ( " Email to ' " . $config [ 'email_recipient' ] . " ' failed ! " );
ErrorLog ( " Email " , $databases [ 'Name' ][ $dump [ 'dbindex' ]], 'Subject: ' . stripslashes ( $subject ), $lang [ 'L_MAILERROR' ]);
$dump [ 'errors' ] ++ ;
}
if ( isset ( $mpdatei ) && $config [ 'send_mail_dump' ] == 1 )
{ // && ($config['email_maxsize']==0 || ($config['email_maxsize']>0 && $config['multipartgroesse2']<=$config['email_maxsize']))) {
for ( $i = 0 ; $i < count ( $mpdatei ); $i ++ )
{
$file_name = $mpdatei [ $i ];
$file_type = filetype ( $config [ 'paths' ][ 'backup' ] . $mpdatei [ $i ]);
$file_size = filesize ( $config [ 'paths' ][ 'backup' ] . $mpdatei [ $i ]);
$fp = fopen ( $config [ 'paths' ][ 'backup' ] . $mpdatei [ $i ], " r " );
$contents = fread ( $fp , $file_size );
$encoded_file = chunk_split ( base64_encode ( $contents ));
fclose ( $fp );
$subject = $mp_sub . " [Part " . ( $i + 1 ) . " / " . count ( $mpdatei ) . " ] " ;
$header = " FROM: " . $config [ 'email_sender' ] . " \n " ;
if ( isset ( $config [ 'email_recipient_cc' ]) && trim ( $config [ 'email_recipient_cc' ]) > '' ) $header .= " Cc: " . $config [ 'email_recipient_cc' ] . " \r \n " ;
$header .= " MIME-version: 1.0 \n " ;
$header .= " Content-type: multipart/mixed; " ;
$header .= " boundary= \" Message-Boundary \" \n " ;
$header .= " Content-transfer-encoding: 7BIT \n " ;
$header .= " X-attachments: $file_name " ;
$body_top = " --Message-Boundary \n " ;
$body_top .= " Content-type: text/html; charset=utf-8 \n " ;
$body_top .= " Content-transfer-encoding: 7BIT \n " ;
$body_top .= " Content-description: Mail message body \n \n " ;
$msg_body = $body_top . addslashes ( $lang [ 'L_EMAIL_ONLY_ATTACHMENT' ] . $lang [ 'L_EMAILBODY_FOOTER' ]);
$msg_body .= " \n \n --Message-Boundary \n " ;
$msg_body .= " Content-type: $file_type ; name= \" " . $mpdatei [ $i ] . " \" \n " ;
$msg_body .= " Content-Transfer-Encoding: BASE64 \n " ;
$msg_body .= " Content-disposition: attachment; filename= \" " . $mpdatei [ $i ] . " \" \n \n " ;
$msg_body .= " $encoded_file\n " ;
$msg_body .= " --Message-Boundary-- \n " ;
$email_log = " Email with $mpdatei[$i] was sent to ' " . $config [ 'email_recipient' ] . " ' " ;
$email_out = $lang [ 'L_EMAIL_WAS_SEND' ] . " ` " . $config [ 'email_recipient' ] . " ` " . $lang [ 'L_WITH' ] . " ` " . $mpdatei [ $i ] . " `.<br> " ;
if ( @ mail ( $config [ 'email_recipient' ], stripslashes ( $subject ), $msg_body , $header ))
{
$out .= '<span class="success">' . $email_out . '</span>' ;
WriteLog ( " $email_log " );
}
else
{
$out .= '<span class="error">' . $lang [ 'L_MAILERROR' ] . '</span><br>' ;
WriteLog ( " Email to ' " . $config [ 'email_recipient' ] . " ' failed ! " );
ErrorLog ( " Email " , $databases [ 'Name' ][ $dump [ 'dbindex' ]], 'Subject: ' . stripslashes ( $subject ), $lang [ 'L_MAILERROR' ]);
$dump [ 'errors' ] ++ ;
}
}
}
}
function DoFTP ( $i )
{
global $config , $dump , $out ;
if ( $config [ 'multi_part' ] == 0 )
{
SendViaFTP ( $i , $dump [ 'backupdatei' ], 1 );
}
else
{
$dateistamm = substr ( $dump [ 'backupdatei' ], 0 , strrpos ( $dump [ 'backupdatei' ], " part_ " )) . " part_ " ;
$dateiendung = ( $config [ 'compression' ] == 1 ) ? " .sql.gz " : " .sql " ;
for ( $a = 1 ; $a < ( $dump [ 'part' ] - $dump [ 'part_offset' ]); $a ++ )
{
$mpdatei = $dateistamm . $a . $dateiendung ;
SendViaFTP ( $i , $mpdatei , $a );
}
}
}
function SendViaFTP ( $i , $source_file , $conn_msg = 1 )
{
global $config , $out , $lang ;
flush ();
if ( $conn_msg == 1 ) $out .= '<span class="success">' . $lang [ 'L_FILESENDFTP' ] . " ( " . $config [ 'ftp_server' ][ $i ] . " - " . $config [ 'ftp_user' ][ $i ] . " )</span><br> " ;
// Herstellen der Basis-Verbindung
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 ]);
// Einloggen mit Benutzername und Kennwort
$login_result =@ ftp_login ( $conn_id , $config [ 'ftp_user' ][ $i ], $config [ 'ftp_pass' ][ $i ]);
if ( $config [ 'ftp_mode' ][ $i ] == 1 ) ftp_pasv ( $conn_id , true );
// Verbindung überprüfen
if (( ! $conn_id ) || ( ! $login_result ))
{
$out .= '<span class="error">' . $lang [ 'L_FTPCONNERROR' ] . $config [ 'ftp_server' ][ $i ] . $lang [ 'L_FTPCONNERROR1' ] . $config [ 'ftp_user' ][ $i ] . $lang [ 'L_FTPCONNERROR2' ] . '</span><br>' ;
}
else
{
if ( $conn_msg == 1 ) $out .= '<span class="success">' . $lang [ 'L_FTPCONNECTED1' ] . $config [ 'ftp_server' ][ $i ] . $lang [ 'L_FTPCONNERROR1' ] . $config [ 'ftp_user' ][ $i ] . '</span><br>' ;
}
// Upload der Datei
$dest = $config [ 'ftp_dir' ][ $i ] . $source_file ;
$source = $config [ 'paths' ][ 'backup' ] . $source_file ;
$upload =@ ftp_put ( $conn_id , $dest , $source , FTP_BINARY );
// Upload-Status überprüfen
if ( ! $upload )
{
$out .= '<span class="error">' . $lang [ 'L_FTPCONNERROR3' ] . " <br>( $source -> $dest )</span><br> " ;
}
else
{
$out .= '<span class="success">' . $lang [ 'L_FILE' ] . ' <a href="' . $config [ 'paths' ][ 'backup' ] . $source_file . '" class="smallblack">' . $source_file . '</a>' . $lang [ 'L_FTPCONNECTED2' ] . $config [ 'ftp_server' ][ $i ] . $lang [ 'L_FTPCONNECTED3' ] . '</span><br>' ;
WriteLog ( " ' $source_file ' sent via FTP. " );
}
// Schließen des FTP-Streams
@ ftp_quit ( $conn_id );
}
?>