<?php
// FTP Daten vom Backup Server
$ftp['host']="HOST";
$ftp['user']="USER";
$ftp['pass']="PASSWORT";
// Wo sollen die tar.gz's und MD5 Dateien gespeichert werden?
$tmp="/tmp/";
// WICHTIG: Beim ersten Paket muss immer statt $i++ $i=0 stehen!
// So in etwa (Beispiel):
$i=0;
$tar[$i]['name']="config.tar.gz";
$tar[$i]['dir'][]="/etc/postfix";
$tar[$i]['dir'][]="/etc/courier";
$tar[$i]['dir'][]="/etc/spamassassin";
$tar[$i]['dir'][]="/etc/apache2";
$tar[$i]['dir'][]="/etc/bind";
$tar[$i]['dir'][]="/etc/dovecot";
$tar[$i]['dir'][]="/etc/proftpd";
$tar[$i]['par'][]="";
$i++;
$tar[$i]['name']="var.tar.gz";
$tar[$i]['dir'][]="/var";
$tar[$i]['par'][]="--exclude=/downloads/";
//////////////////////////////////////////////////////////////////
function md5_dir($dir) {
if (!is_dir($dir)) {
return @md5_file($dir);
}
$filemd5s = array();
$d = dir($dir);
while (false !== ($entry = $d->read())) {
if ($entry != '.' && $entry != '..') {
if (is_dir($dir.'/'.$entry)) {
$filemd5s[] = MD5_DIR($dir.'/'.$entry);
} else {
$filemd5s[] = md5_file($dir.'/'.$entry);
}
}
}
$d->close();
return md5(implode('', $filemd5s));
}
for($i=0;$i<count($tar);$i++) {
echo "creating ".$tar[$i]['name']."... ";
$directory="";
$md5list=array();
foreach($tar[$i]['dir'] as $dir) {
$directory.=" ".$dir;
$md5list[]=md5_dir($dir);
}
shell_exec("tar cfz ".$tmp.$tar[$i]['name'].$directory." ".$tmp.$tar[$i]['par']." &> /dev/null");
echo "done.\n";
echo " calculating MD5: ";
$tar[$i]['md5'] = md5(implode('', $md5list));
echo $tar[$i]['md5']."\n";
}
echo "\n";
echo "connecting to ftp server... ";
$ftp['conn'] = @ftp_connect($ftp['host']);
if($ftp['conn']) {
echo"done.\n";
echo"logging in... ";
} else {
die("error.\n");
}
$login = ftp_login($ftp['conn'], $ftp['user'], $ftp['pass']);
if($login) {
echo"done.\n";
} else {
die("error.\n");
}
echo "\n";
for($i=0;$i<count($tar);$i++) {
echo "trying to get '".$tar[$i]['name'].".md5'... ";
$result = @ftp_get($ftp['conn'],$tmp.$tar[$i]['name'].".md5","md5/".$tar[$i]['name'].".md5",FTP_ASCII);
if($result) {
echo"done.\n";
$md5=file_get_contents($tmp.$tar[$i]['name'].".md5");
if($md5 == $tar[$i]['md5']) {
$upload=false;
echo" MD5 match (".$md5.")\n";
} else {
$upload=true;
echo" MD5 missmatch (".$md5." != ".$tar[$i]['md5'].")\n";
}
} else {
echo"error.\n";
$upload=true;
}
if ($upload) {
echo "uploading '".$tar[$i]['name']."'... (".round((filesize($tmp.$tar[$i]['name']) / 1024 / 1024),2)." MB) ";
ftp_put($ftp['conn'],"$tar[$i]['name'],$tmp.$tar[$i]['name'],FTP_BINARY);
echo "done.\n";
echo "uploading '".$tar[$i]['name'].".md5'... ";
$fp=fopen($tmp.$tar[$i]['name'].".md5","w");
fwrite($fp,$tar[$i]['md5']);
fclose($fp);
ftp_put($ftp['conn'],"md5/".$tar[$i]['name'].".md5",$tmp.$tar[$i]['name'].".md5",FTP_BINARY);
echo "done.\n";
}
}
ftp_close($ftp['conn']);
echo"\n";
echo"ready.\n";
echo"\n";
?>