Backup von Server zu Server


Back2toxic

Erfahrenes Mitglied
Backup von Server zu Server - löschproblem

Edit2: Problem gelöst. Nachdem ich allow_url_fopen und allow_url_include auf ON gesetzt habe läuft das ganze wie ne 1.

Hallo Ihr!

Ich habe ein Backup-Script geschrieben, bestimmt ist es noch Verbesserungswürdig, für Tipps bin ich immer offen :)

Das Script wird auf unserem Backupserver via Cron alle 3 Tage gestartet werden, sobald es fertig ist.

Der erste Teil des Scriptes auf unserem Backupserver ruft lediglich Backupdateien auf den Kundenservern auf. Da wir auf manchen Servern aber nicht über Root-Rechte verfügen (ein Dankeschön an unseren Hoster...), läuft das Backup nicht über rsync, sondern wie folgt:

Backupserver: Aufruf der Scripte auf Kundenservern:
PHP:
//nicht auf jedem Server ist allow_url_fopen enabled
<img src="http://www.domain.tld/pfad/zur/datei/backup.php" style="visibility: hidden;"/>

Kundenserver: Hier wird jetzt ein tar.gz archiv des zu sichernden Verzeichnisses erstellt, nach erfolgreicher Erstellung wird dies dem Backupserver mitgeteilt.

PHP:
<?php
set_time_limit(0);

//Name des Kunden
$kunde = 'Mustermann AG';
//Hier das zu sichernde Verzeichnis eintragen, bsp. /html
$verzeichnis = '/xyz';


require_once('classes/tar/tar.class.php');
    $date = time();
    $date = date("Ymd", $date);
$tarname = $kunde."_".$date.".tar.gz";

//tar-Archiv anlegen und gz-kompirimieren
$tar = new Archive_Tar($tarname,"gz");
$contents = array();
function ordnerinhalt($ordner = '', &$contents)
{
   // Ordnerhandle
   $handle = opendir($ordner);
   // Ordner rekursiv auslesen, gefundene Daten in $contents file und folder-arrays
   // schreiben
   while ($file = readdir ($handle))
   {
      if($file{0} != '.')
      {//Versteckte Dateien nicht anzeigen
         if(is_dir($ordner . '/' . $file))
         {
            $folderArray[] = $file;
         }
         else
         {
            $fileArray[] = $file;
         }
      }
   }

   closedir($handle);

   //Ordner in ein Array packen
   if(isset($folderArray))
   {
      asort($folderArray);
      foreach($folderArray as $row)
      {
         $contents[count($contents)] = $ordner . '/' . $row;
      }
   }

   //Dateien in die ordner packen
   if(isset($fileArray))
   {
      asort($fileArray);
      foreach($fileArray as $row)
      {
         $contents[count($contents)] = $ordner . '/' . $row;
      }
   }
   return $content;
}

ordnerinhalt($_SERVER['DOCUMENT_ROOT'].$verzeichnis,$contents);

if($tar->create($contents)){
   $call = "http://www.backupserver.tld/pfad_zum_backupordner/get_file.php?kunde=".$kunde."&name=".$tarname;
   //echo $call;
   include($call);
} 
?>

Jetzt wird auf dem Backupserver die get_file.php aufgerufen. Hier wird zuerst überprüft, ob der Kunde stimmt, danach wird die Datei del_old_stuff.php mit parameter Dateiname aufgerufen.
PHP:
<?php
//$_GET['kunde']  = Name des Kunden
//$_GET['name']   = Name der Datei
$kunde = $_GET['kunde'];
$name = $_GET['name'];
//echo $kunde;
//echo $name;

  switch($kunde){
         case 'name des kunden':$last_line = system('wget ftp://user:pass@kundenserver.tld/pfad/zur/datei/'.$name);
                            if($last_line !== false || $last_line != 0){
                              echo $last_line;
                              //echo "im calling!<br/>";
                              echo "<img src=\"http://www.Kundenserver.tld/pfad/zur/datei/del_old_stuff.php?data=".$name."\" style=\"visibility: none;\"/>";
                              //echo "img src=\"http://www.Kundenserver.tld/pfad/zur/datei/del_old_stuff.php?data=".$name."\" style=\"visibility: none;\"/>";
                            } else {
                              header("LOCATION: ".$_SERVER['PHP_SELF']);
                            }
                            break;
         default:
  }
?>

Bis zu wget klappt das ganze immer.

Nach erfolgreichem kopieren des Backups vom Kundenserver zum Backupserver wird ein Script auf dem Kundenserver angesprochen, welches das dort erstellte Backup löscht.

PHP:
<?php
  if(strpos($_GET['data'],"tar.gz") === false){
    echo "Strpos";
  } else {
    if(is_file($_GET['data'])){
      $data = $_SERVER['DOCUMENT_ROOT']."/pfad_zur_backupdatei/".$_GET['data'];
      unlink($data);
      //echo $_SERVER['DOCUMENT_ROOT']."/pfad_zur_backupdatei/".$_GET['data'];
    }
  }
?>


Mein Problem hierbei ist:
Rufe ich das Script call_backup_files.php auf unserem Backupserver auf, wird auf dem Kundenserver ein Backup erstellt, und der Backupserver holt sich dieses Backup via wget, das Backup wird auf dem Kundenserver aber nicht gelöscht.

Rufe ich auf dem Kundenserver das Script backup.php auf, wird das Backup erstellt, vom Backupserver via wget abgeholt, und auf dem Kundenserver gelöscht.

Wo liegt hier das Problem?

Gibt es eventuell noch Verbesserungen zum Thema Performance/Sicherheit?

Grüße,
Chris


Edit: Ich habe eben dem Archiv direkt nach Erstellung testweise vom Script, noch vor call auf get_file.php, mal chmod 777 geben lassen, es ändert nichts an der Situation.
 
Zuletzt bearbeitet:

Neue Beiträge