Backup des gesamten Webserverinhalts als *.zip gerunterladen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
harry2003
Mitglied
Beiträge: 27
Registriert: 28.02.2013 22:30
Kontaktdaten:

Backup des gesamten Webserverinhalts als *.zip gerunterladen

Beitrag von harry2003 »

Hallo zusammen,

nach stundenlanger erfolgloser Suche frage ich nun die phpbb Community, wie ich folgendes lösen kann:

Ich möchte alle Dateien und Ordner des Webservers (alles was im htdocs Verzeichnis liegt) per php packen und wenn möglich gleich herunterladen oder in einem backup Ordner (z.b. htdocs/backup/backup.zip) ablegen. Denn eine gesamte Datei ist schneller heruntergeladen als viele kleine.

Gruß Falk
Benutzeravatar
canonknipser
Ehemaliges Teammitglied
Beiträge: 2053
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Beitrag von canonknipser »

Muss das unbedingt per php sein?
Als Alternative Möglichkeit fallen mir spontan ein :
  • Dein Hoster hat eine entsprechende Funktion im Kontroll-Panel
  • Du hast Shell-Zugang und kannst mittels tar o.ä. ein Archiv erstellen
  • Du machst inkrementelle Backups mittels eines ftp-fähigen Backup-Programms (sinnvoll, wenn es nicht nur eine Einmal-Aktion, sondern eine regelmäßige Aktion sein soll, dann hast du immer aktuelle Stände, ohne jedesmal einen Komplett-Download zu machen)
Falls du ein php-Script schreiben willst, das Dateien direkt komprimiert wegschreibt, schau dir die Klasse base_extractor im admin-backend includes/acp/acp_database.php an, da findest du sicher Anregungen ;)
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;) - Bilder
Kein Support via PN, nur im Board und (manchmal) im IRC
juliokr
Mitglied
Beiträge: 538
Registriert: 06.02.2015 12:54
Wohnort: Paris
Kontaktdaten:

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Beitrag von juliokr »

Möglich dürfte es sein falls DU SSH Zugang zu deinem Server hast z.B. mittels dem FTP client Transmit
http://www.jordanlloyd.com/blog/how-to- ... h-transmit
harry2003
Mitglied
Beiträge: 27
Registriert: 28.02.2013 22:30
Kontaktdaten:

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Beitrag von harry2003 »

Leider habe ich keinen SSH Zugriff.

Was zum entpacken habe ich bereits gefunden.

Code: Alles auswählen

<?php
     $zip = new ZipArchive;
     $res = $zip->open('file.zip');
     if ($res === TRUE) {
         $zip->extractTo('./');
         $zip->close();
         echo 'ok';
     } else {
         $file = "file.zip";
         exec("unzip $file 2>&1", $out);
         print(implode("<br>", $out));
     }
?>
Benutzeravatar
canonknipser
Ehemaliges Teammitglied
Beiträge: 2053
Registriert: 10.09.2011 11:14
Kontaktdaten:

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Beitrag von canonknipser »

Dann kennst du ja die php-Klasse. Die ist auch entsprechend dokumentiert:
http://php.net/manual/de/class.ziparchive.php
Und Beispiele gibt es da auch
Grüße, canonknipser
"there are only 10 types of people: those, who understand binary and those, who don't"
just arrived ;) - Bilder
Kein Support via PN, nur im Board und (manchmal) im IRC
Verschoben von Support-Forum nach Coding & Technik am 27.07.2016 15:25 durch canonknipser

juliokr
Mitglied
Beiträge: 538
Registriert: 06.02.2015 12:54
Wohnort: Paris
Kontaktdaten:

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Beitrag von juliokr »

Wer suchet der findet :wink:

Code: Alles auswählen

<?php
// Get real path for our folder
$rootPath = realpath('pfad-zum-Ordner');

// Initialize archive object
$zip = new ZipArchive();
$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        // Add current file to archive
        $zip->addFile($filePath, $relativePath);
    }
}

// Zip archive will be created only after closing object
$zip->close();
?>
harry2003
Mitglied
Beiträge: 27
Registriert: 28.02.2013 22:30
Kontaktdaten:

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Beitrag von harry2003 »

juliokr hat geschrieben:Wer suchet der findet :wink:

Code: Alles auswählen

<?php
// Get real path for our folder
$rootPath = realpath('pfad-zum-Ordner');

// Initialize archive object
$zip = new ZipArchive();
$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        // Add current file to archive
        $zip->addFile($filePath, $relativePath);
    }
}

// Zip archive will be created only after closing object
$zip->close();
?>
Damit bekomme ich einen Server Fehler 500. Aber es wird ein File erstellt, habe es noch erweitert. Die Laufzeit erhöht und die Ausgabe das es fertiggestellt ist erscheint nun.

Hier meine abgeänderte Version:

Code: Alles auswählen

    <?php
    // die maximale Ausführzeit erhöhen
    ini_set("max_execution_time", 3000);

    // Get real path for our folder
    $rootPath = realpath('pfad-zum-Ordner');

    // Initialize archive object
    $zip = new ZipArchive();
    $zip->open('backup.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

    // Create recursive directory iterator
    /** @var SplFileInfo[] $files */
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($rootPath),
        RecursiveIteratorIterator::LEAVES_ONLY
    );

    foreach ($files as $name => $file)
    {
        // Skip directories (they would be added automatically)
        if (!$file->isDir())
        {
            // Get real and relative path for current file
            $filePath = $file->getRealPath();
            $relativePath = substr($filePath, strlen($rootPath) + 1);

            // Add current file to archive
            $zip->addFile($filePath, $relativePath);
        }
    }

    // Zip archive will be created only after closing object
    $zip->close();
    echo "Archiv erfolgreich erstellt.";
    ?>
Vielen dank an "juliokr" für die Hilfe.

Gruß Falk
juliokr
Mitglied
Beiträge: 538
Registriert: 06.02.2015 12:54
Wohnort: Paris
Kontaktdaten:

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Beitrag von juliokr »

keine Ursache !
Kommt sicher auf die größe des Ordners und die Auslastung des Servers an !
Hab's gerade mit meinem kompletten phpBB Forum getestet, ist wirklich erstaunlich bei mir hat das erstellen des zip weniger 1 Minute gedauert und der download des zip wenige Sekunden
Thunder_one
Mitglied
Beiträge: 438
Registriert: 01.05.2015 23:37

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Beitrag von Thunder_one »

Frage meinerseits. Wie führt / ruft man das ganze auf?

Danke euch.
harry2003
Mitglied
Beiträge: 27
Registriert: 28.02.2013 22:30
Kontaktdaten:

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Beitrag von harry2003 »

Thunder_one hat geschrieben:Frage meinerseits. Wie führt / ruft man das ganze auf?

Danke euch.

Ich habe den Code in eine zip.php gespeichert, diese dann auf den Server hochgeladen, dann die Datei im Browser ausgeführt. Anpassen der Verzeichnisse nicht vergessen.


Gruß Falk
Antworten

Zurück zu „Coding & Technik“