AllesMeins: Grosse Menge Dateien packen

Hiho,

ich würde gerne ein Backup Script basteln das den kompletten Inhalt einer Webpräsenz in eine zip Datei packt. Das ganze ist auch eigentlich kein Problem. Ich habe auch schon eine kleine Klasse gefunden die das mit dem zippen für mich übernimmt. Soweit so schön. Leider ist die betreffenden webpräsenz bei 1&1 gehostet und die schmettern mir jeden Versuch mit einem Error 500 ab.

Ich habe etwas rumprobiert und dabei festgestellt das scheinbar irgend eine Sperre greift (entweder mein Script braucht zu lange oder zu viel Speicher). Ich denke die einzige Möglichkeit da noch etwas zu optimieren liegt bei der zip Klasse die im Moment voraussetzt das jede Datei die gepackt werden soll komplett per fread() gelesen wird und erst am Ende des Scriptes aus dem ganzen Ding eine zip erstellt wird. Ich denke hier liegt der Knackpunkt. Deshalb meine Frage gibt es eine effektivere Möglichkeit diese Dateien zusammen in ein Archiv zu packen (gerne zip, aber zur Not tut es auch jedes andere Archiv - hauptsache es ist eine Datei) ohne jede einzelne zu lesen und während der Scriptlaufzeit im Speicher halten zu müssen? Gibt es da PHP Funktionen mit denen sich das leicht machen lässt?
Oder hat sonst irgendwer eine Idee wie ich es bewerkstelligen kann die komplette Präsenz in ein Archiv zu bekommen?

Grüsse

Marc

  1. Hallo,

    Oder hat sonst irgendwer eine Idee wie ich es bewerkstelligen kann die komplette Präsenz in ein Archiv zu bekommen?

    Du hast schon mal was vom FTP gehört?

    Grüße
    Thomas

    1. Hiho,

      wenn ich nicht helfende Kommentare wollte hätte ich mich vor den Spiegel gestellt - das kann ich selber nämlich auch ziemlich gut...

      FTP fällt aus weil das Backup auch Leute machen können sollen die keinen FTP Zugang haben.

      Marc

      1. Hi,

        wenn ich nicht helfende Kommentare wollte hätte ich mich vor den Spiegel gestellt - das kann ich selber nämlich auch ziemlich gut...

        FTP fällt aus weil das Backup auch Leute machen können sollen die keinen FTP Zugang haben.

        Hast Du Cronjobs? Dann könntest Du das im Hintergrund machen lassen.
        Einfach tar czf backup_von_heute.tgz /zusichernder_pfad

        Mit php wirst Du das so nur hinbekommen, wenn Du den Speicher und die Auszeit erhöhst (Standard: 8MB, 30Sek).

        Gruß
        Reiner

        P.S.: Ich halte den Kommentar von Thomas nicht für gänzlich unberechtigt. Zumindest php.ini aufzubohren, sollte man lassen, wenn es techn. eleganter geht.

        1. Hiho,

          technisch eleganter geht es sicherlich. Aber leider stören die eingeschränkten Möglichkeiten auf den 1&1 Webservern da etwas. Und da ich keinen einfluss auf die wahl des Hosters habe...

          Marc

  2. Moin,

    ich würde gerne ein Backup Script basteln das den kompletten Inhalt einer Webpräsenz in eine zip Datei packt. Das ganze ist auch eigentlich kein Problem. Ich habe auch schon eine kleine Klasse gefunden die das mit dem zippen für mich übernimmt.

    Uhh. Von hinten durch die Brust über das Kleinhirn in's Auge.

    Oder hat sonst irgendwer eine Idee wie ich es bewerkstelligen kann die komplette Präsenz in ein Archiv zu bekommen?

    Was hältst du von der altmodischen Lösung einfach zip oder tar aufzurufen. Ja, ich weiss, das ist nicht besonders modern und auch nicht objektorientiert oder so, aber dafür funktioniert es schon seit Jahren, völlig ohne PHP-induzierte Probleme.

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
    1. Hello,

      Was hältst du von der altmodischen Lösung einfach zip oder tar aufzurufen. Ja, ich weiss, das ist nicht besonders modern und auch nicht objektorientiert oder so, aber dafür funktioniert es schon seit Jahren, völlig ohne PHP-induzierte Probleme.

      Wenn er bei dem poeligen Acount Zugriff auf die Systemfunktionne hat, sicher ein sehr gut passender Weg, zumal die Zip-Tools von PHP keine Archive bauen können. Aber sonst sind sie sehr effektiv.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
    2. Hiho,

      ist auch ne Möglichkeit - jetzt müsstet ihr mir nur noch helfen herauszufinden ob (und wenn ja wo) bei 1&1 tar bzw. zip installiert ist. Da man dort (soweit ich weiss) ja keinen Zugriff auf die Konsole hat und einfach mal zu raten auch nicht so doll bin ich etwas ratlos wie ich das rausfinden soll...

      Marc

      1. Hello,

        ist auch ne Möglichkeit - jetzt müsstet ihr mir nur noch helfen herauszufinden ob (und wenn ja wo) bei 1&1 tar bzw. zip installiert ist. Da man dort (soweit ich weiss) ja keinen Zugriff auf die Konsole hat und einfach mal zu raten auch nicht so doll bin ich etwas ratlos wie ich das rausfinden soll...

        Das wird Dir wahrscheinlich nichts nützen, da der Safe_Mode eingeschaltet wwerden sein wird, der dann die Ausführung von Systembefehlen unterbindet. Die ausführbaren Systembefehle müssen dann im "safe_mode_exec_dir" liegen. Wenn der Administrator einigermaßen bei Verstand ist, ist das dann aber für Deinen Apache-Prozess/Deamon und Dich als FTP-User nicht beschreibbar. Sonst könntest Du ja doch alle möglichen Systemprogramme hochladen.

        Gib uns also mal einen Link auf Deine PHPInfo(), den Du aber später wieder entfernen solltest.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hello Tom,

          ist auch ne Möglichkeit - jetzt müsstet ihr mir nur noch helfen herauszufinden ob (und wenn ja wo) bei 1&1 tar bzw. zip installiert ist. Da man dort (soweit ich weiss) ja keinen Zugriff auf die Konsole hat und einfach mal zu raten auch nicht so doll bin ich etwas ratlos wie ich das rausfinden soll...

          Das wird Dir wahrscheinlich nichts nützen, da der Safe_Mode eingeschaltet wwerden sein wird, der dann die Ausführung von Systembefehlen unterbindet. Die ausführbaren Systembefehle müssen dann im "safe_mode_exec_dir" liegen. Wenn der Administrator einigermaßen bei Verstand ist, ist das dann aber für Deinen Apache-Prozess/Deamon und Dich als FTP-User nicht beschreibbar. Sonst könntest Du ja doch alle möglichen Systemprogramme hochladen.

          Du wirst lachen, genau das gleiche habe ich gerade auf einem Server von 1&1 mit phpinfo() nachgeschlagen und war ein wenig baff, weder safe_mode noch anderweitige beschränkungen vorzufinden. Auch hatte ich nicht damit gerechnet vor einem Linuxrechner i686 zu sein (dachte da eher an SunOS oder so...).

          Darf ich Dich nochmal kurz um beantworten in https://forum.selfhtml.org/?t=101567&m=624459 bitten :)
          Wäre lieb.

          Gruß aus Berlin!
          eddi

          1. Hello,

            Du wirst lachen, genau das gleiche habe ich gerade auf einem Server von 1&1 mit phpinfo() nachgeschlagen und war ein wenig baff, weder safe_mode noch anderweitige beschränkungen vorzufinden. Auch hatte ich nicht damit gerechnet vor einem Linuxrechner i686 zu sein (dachte da eher an SunOS oder so...).

            Warum sollte ich da lachen? Es ist doch naheliegend.
            Wir können uns aber die ganze Diskussion ersparen, wenn PHP bei 1&1 im CGI-Modus läuft.
            Das weiß ich nicht.

            Darf ich Dich nochmal kurz um beantworten in https://forum.selfhtml.org/?t=101567&m=624459 bitten :)

            Die habe ich nicht verstanden ;-)

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Re:

              Warum sollte ich da lachen? Es ist doch naheliegend.

              Warum ist das bei einem Sharedhost naheliegend? O.O

              Wir können uns aber die ganze Diskussion ersparen, wenn PHP bei 1&1 im CGI-Modus läuft.
              Das weiß ich nicht.

              1&1 scheint wohl PHP nur als CGI anzubieten, so auch in diesem Fall. Jetzt bin ich gerade ein wenig verdutzt; was sollte bei CGI das Problem sein, ich durchwühle gerade den Server mit echo ls -l /${verzeichnis};

              Darf ich Dich nochmal kurz um beantworten in https://forum.selfhtml.org/?t=101567&m=624459 bitten :)
              Die habe ich nicht verstanden ;-)

              Du hattest vor einiger Zeit doch um Test einiger Scripte gebeten, wo ich Dich dann mit ½ Millionen Anfragen bombardiert habe. Nun wollte ich wissen, ob diese Methode (http://selfhtml.bitworks.de/flat_box.php.txt) bereits ausgereift ist? Ob Du es mal statt while(){usleep();} mit einer Semaphore versucht hast. Einerseits juckt es mich ein wenig, diesen Versuch mal zu unternehmen, aber andererseits letztentlich bauche ich lock() nach (Rad neu erfunden).

              Gruß aus Berlin!
              eddi

              1. Hello,

                Du hattest vor einiger Zeit doch um Test einiger Scripte gebeten, wo ich Dich dann mit ½ Millionen Anfragen bombardiert habe. Nun wollte ich wissen, ob diese Methode (http://selfhtml.bitworks.de/flat_box.php.txt) bereits ausgereift ist? Ob Du es mal statt while(){usleep();} mit einer Semaphore versucht hast. Einerseits juckt es mich ein wenig, diesen Versuch mal zu unternehmen, aber andererseits letztentlich bauche ich lock() nach (Rad neu erfunden).

                Ich weiß leider immer noch nicht, welche Passage Du meintest.

                usleep() hatte wir einerseits bei den Versuchen eingesetzt, um bei älteren PHP-Version das Time-Limit auszutricken. Für die Kontroll-Progrämmchen haben wir es benutzt, damit die Prozesse immer wieder Lebenszeichen von sich geben konnten. Der Prozess wurde ja erst abgebrochen, wenn der User ein "Abort()" veranlasst hat.

                Der Sinn der Übung war die zeitliche Entzerrung von sonst sehr schnell hintereinander ablaufenden Prozessen, um selber beobachten zu können, was mit der Anforderung passiert.

                Die Flatbox ist keinesfalls "fertig". Dennis wollte noch ein paar wesentliche Wrapper für die Grundfunktionen schreiben. Außerdem arbeitet sie bisher auch nur mittels Filelocking. Eine andere Version (die in der Adressverwaltung benutzte) könnte aber z.B. auch mit Record-Locking oder Academic-Locking arbeiten.

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
      2. Hiho Marc,

        wie so oft kann auch hier der Blick in die Ausgabe von phpinfo() wahre Wunder bewirken! Unter "Environment" siehst Du Dir an ob PATH gestet ist, dann würde nämlich der aufruf tar --parameter; ausreichen. Desweiteren siehst Du Dir aufmerksam an, welche Funktionen nicht erlaubt sind; das betrifft die Core-Konfiguration "disable_functions" in Verbindung mit "safe_mode".

        Gruß aus Berlin!
        eddi

        1. Hello,

          wie so oft kann auch hier der Blick in die Ausgabe von phpinfo() wahre Wunder bewirken! Unter "Environment" siehst Du Dir an ob PATH gestet ist, dann würde nämlich der aufruf tar --parameter; ausreichen. Desweiteren siehst Du Dir aufmerksam an, welche Funktionen nicht erlaubt sind; das betrifft die Core-Konfiguration "disable_functions" in Verbindung mit "safe_mode".

          Nachtrag:
          http://de.php.net/manual/en/features.safe-mode.php#ini.safe-mode-exec-dir

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
        2. Hiho,

          ich hab es jetzt einfach mal nach der Methode "Probieren geht schneller als studieren" gemacht und einfach mal ein system("tar --help > ausgabe.txt"); gemacht und siehe da, die Hilfeausgabe von tar ist in der Datei gelandet. Es scheint also wirklich zu gehen. Danke für die Hilfe - hätte gar nicht gedacht das das so problemlos klappt...

          Grüsse

          Marc

      3. Da man dort (soweit ich weiss) ja keinen Zugriff auf die Konsole hat und einfach mal zu raten auch nicht so doll bin ich etwas ratlos wie ich das rausfinden soll...

        Nimm doch einfach die phpshell. :-)