Seite 1 von 2

Backup des gesamten Webserverinhalts als *.zip gerunterladen

Verfasst: 27.07.2016 13:51
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

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Verfasst: 27.07.2016 14:28
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 ;)

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Verfasst: 27.07.2016 14:58
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

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Verfasst: 27.07.2016 15:13
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));
     }
?>

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Verfasst: 27.07.2016 15:24
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

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Verfasst: 27.07.2016 15:51
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();
?>

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Verfasst: 27.07.2016 18:22
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

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Verfasst: 27.07.2016 18:56
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

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Verfasst: 27.07.2016 19:25
von Thunder_one
Frage meinerseits. Wie führt / ruft man das ganze auf?

Danke euch.

Re: Backup des gesamten Webserverinhalts als *.zip gerunterl

Verfasst: 27.07.2016 19:46
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