FTP-Backup-Skript in PHP

Achtung: Diese Backup Lösung habe ich im nächsten Artikel noch einmal stark erweitert. Ich empfehle diese komplexere Lösung zu benutzen und die darin enthaltenen Sicherheitshinweise zu beachten.

FTP Backups (bisher)

Mein Blog läuft auf dem Hoster ALL-INKL.com, den ich nebenbei gesagt nach mehreren Jahren immernoch empfehlen kann.
Bisher habe ich halbwegs (un)regelmäßig manuell, von Hand, FTP Backups erstellt. Also alle paar Monate habe ich über einen FTP Tool wie FileZilla bestimmte Ordner heruntergeladen, Datei für Datei, anschließend in ein Archiv gepackt und irgendwo verstaut. Dieser Prozess ist natürlich in vielerlei Hinsicht nicht zuverlässig, zeitintensiv und aufwändig.
Auch das Sichern der Ordner automatisiert mit Tools wie SyncBack (mein Artikel dazu) wird immer zeitintensiver, je größer die zu sichernde Datenmenge wird. Außerdem muss immer ein PC, auf dem die Tools laufen, an sein.

FTP Backups via PHP Skript

Sinnvoller ist es, diese Backups auf dem Server des Webhosters erstellen zu lassen. So wird der heimische PC nicht belastet.
All-Inkl bietet dafür ein recht einfaches PHP Skript zum Sichern eines einzelnen FTP Ordners oder des gesamten All-Inkl FTP Accounts.

Ich habe dieses Skript ausgebaut und um verschiedene Funktionen ergänzt:

  • beliebig viele Ordner des All-Inkl Accounts in einzelne .tar.gz Archive sichern
  • Einschränkung der Anzahl aufgehobener Backups – älteste Backups werden automatisch gelöscht
  • detaillierte Ausgabe inklusive benötigter Zeit
  • E-Mail Benachrichtigung

Screenshot

Das Bild zeigt die Ausgaben des Backup Skripts und die versendete E-Mail Benachrichtigung

Code

Achtung: Dieses Backup Skript habe ich in Version 1.1 noch einmal stark erweitert. Ich empfehle diese komplexere Lösung zu benutzen. Besser wäre sogar die Version 1.2, mit der sich zusätzlich MySQL Datenbanken mitsichern lassen.

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

Zufälliger Artikel:  Aktive PC-Sessions mit PsLoggedOn im Windows Netzwerk anzeigen

Wichtige Anmerkungen

Bitte beachtet, dass einige Zeilen angepasst werden müssen und der Code nur bei dem Webhoster All-Inkl getestet wurde. Die Zeile include "Archive/Tar.php", die ein externes Modul einbindet, könnte auf anderen Websern zu Problemen führen. Am besten testet ihr es einfach.
Thema Sicherheit: Wie Kenny in den Kommentaren korrekt angemerkt hat, müssen noch Anpassungen erfolgen, wenn das Skript als tatsächliche Backup-Lösung zum Einsatz kommen soll.

  • Die Sicherungen landen bei diesem Skript direkt in dem Skript-Ordner. Die Sicherung(en) sollte(n) nach der Sicherung an einen anderen Ort, beispielsweise auf einen anderen Server oder ein NAS, kopiert werden. Oder ihr automatisiert den Download der Sicherungen nach dem Backupprozess.
  • Sowohl das Skript als auch die Sicherungen können ohne weitere Maßnahmen direkt angesprochen werden. Ihr solltet natürlich den Backup Ordner beispielsweise durch eine htpasswd absichern und den Zugriff auf die Backups über die htaccess einschränken.

Ich werde dieses Online-Backup Thema in Zukunft vermutlich nochmal aufgreifen, erweitern und optimieren. Ich verlinke das dann hier.

4 Kommentare

  1. Doofe Frage 1: Das Ding lässt sich einfach über eine URL von außen aufrufen und das ganz ohne Passwort oder ähnliches?

    Doofe Frage 2: Wo wird das Backup gespeichert? Etwa auf dem gleichen Server, auf dem auch die Originaldateien liegen?

    Doofe Frage 3: Die Backups sind ebenfalls über eine URL von außen abrufbar? Inklusive der WordPress-Datenbank, in der das Adminpasswort und der WordPress-Config-Datei, in der die Datenbank-Zugangsdaten zu finden sind?

  2. Hallo Kenny:
    1) Wenn man den Pfad zur Backup Datei wüsste, könnte man sie aufrufen. Dieser Pfad ist aber in Normalfall nicht bekannt.
    Selbstverständlich ist ein Passwortabfrage, beispielsweise über 2 Zeilen einer htpasswd, schnell ergänzt. Das wäre aber nicht Gegenstand des Sicherungsskripts.

    2) das Backup landet im gleichen Ordner. Die Verwaltung der Backups danach ist stark abhängig vom Nutzer, der Umgebung usw. Man könnte die Backups automatisiert über SyncBack herunterladen lassen, oder per 2, 3 Zeilen auf einen externen Server oder ein NAS kopieren.
    Auch das ist nicht direkter Bestandteil eines PHP Backup Skripts und da kann ich ja auch kaum etwas vorschreiben.

    3) Die Backups sind je nachdem, wie die htaccess konfiguriert ist, von außen erreichbar. Die Datenbank ist in den Backups nicht erreichbar, schließlich handelt es sich um ein FTP Backup.
    Über htaccess könnte man den Download von Dateien verbieten und somit das Handling der Backups dem Skript überlassen.

    Kenny, wie immer schätze ich deine Kritik sehr. Ich erkenne Stellen, an denen ich noch arbeiten muss wenn ich das Programm beispielsweise über längere Zeit nutzen möchte.
    Aber bitte beachte, dass es hier lediglich um ein PHP Backup Skript mit ein paar extra Funktionen geht, und nicht um eine komplette FTP Backup Lösung von Anfang bis Ende. Das Skript muss natürlich noch auf den konkreten Einsatz angepasst werden und so Sachen wie das Kopieren der Sicherungen auf andere Server oder Medien überlasse ich ebenfalls dem Geschick der Leser. Denn wer das Skript einsetzt (, vor allem in produktiven Umgebungen,) sollte die letzten Details hingekommen.

    Ich werde trotzdem deine Punkte später noch im Artikel erwähnend ergänzen.

    So denn 😉

    1. Wie gesagt, ich finds cool, dass du dir die Zeit nimmst und dein Feedback gibst. Ich habe die Punkte nochmal im Post erwähnt. Gegebenenfalls werde ich in den nächsten Tagen selber noch diese Erweiterungen ergänzen und veröffentlichen, da ich das Skript auch vorhabe auf Arbeit zu nutzen und dafür diese Punkte sowieso bearbeiten muss.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.