Giovanni Rena: Datei auf Server entpacken

Hallo,

ich suche bestimmt schon 3 Stunden nach einer vernünftigen Lösung im Internet. Die zlib und gzip von PHP sind nicht wirklich ideal. Hab nicht rausgefunden wie man da ganze Verzeichnise verpacken/entpacken kann und außerdem hab ich gelesen dass es Probleme geben kann, wenn die zip-Dateien zu groß sind.

Also, bitte bitte helft mir! Ich bin am verzweifeln. Ich will bei HostEuope

http://www.neue-webpack-demo.de/phpinfo.php

eine Zipdatei entpacken. Den Vertrag schließich ich erst in ca. 2 Monaten ab wenn die Homepage fertig ist. Deswegen kann ichs nicht ausprobieren. In der PHPInfo steht, dass da Linux läuft. Außerdem hab ich gelesen dass safe_mode=off ist, sprich ich könnte doch ein unzip Programm für Linux auf dem Server ausführen. Würde es gehen wenn ich so ein Linux-unzip in das entsprechende Verzeichnis kopiere und mit PHP aufrufe?

Gruß Giovanni

  1. 你好 Giovanni,

    [...] Würde es gehen wenn ich so ein Linux-unzip in das entsprechende
    Verzeichnis kopiere und mit PHP aufrufe?

    Klar, warum nicht?

    再见,
    克里斯蒂安

    --
    Fortune: Committees have become so important nowadays that subcommittees have to
    be appointed to do the work.
    1. Kannst du mir sagen wo ich so ein Linux unzip-Tool herbekomme? Hast ev. einen Link für ein ähnliches Thema oder einfach noch ein paar Infos dazu?

      1. 你好 Giovanni,

        Kannst du mir sagen wo ich so ein Linux unzip-Tool herbekomme?

        http://www.google.de/search?hl=de&q=linux+unzip&btnG=Google-Suche&meta=

        Der erste Treffer fuehrt zum Ziel...

        http://www.google.de/search?hl=de&q=linux+unzip+download&btnG=Suche&meta=

        Der erste Treffer fuehrt zum Ziel...

        Das haettest du nicht selber geschafft?

        Hast ev. einen Link für ein ähnliches Thema oder einfach noch ein paar
        Infos dazu?

        Was ist dir unklar?

        再见,
        克里斯蒂安

        --
        Kommt ein Nullvektor zum Psychiater: "Herr Doktor, ich bin orientierungslos!"
    2. Hallo,

      [...] Würde es gehen wenn ich so ein Linux-unzip in das entsprechende
      Verzeichnis kopiere und mit PHP aufrufe?
      Klar, warum nicht?

      Ist das wirklich so usus, dass der Nutzer eines Web-Hosters beliebige Binary-Files bzw. sogar Packages in seinem User-Home ausführen darf? Oder weißt Du es jetzt speziell für von diesem Anbieter.

      Die Frage ist ernst, nicht ironisch gemeint. Bisher habe ich mich nur mit eigenen Servern (Intranets) beschäftigen müssen. Die Vorstellung, dass das allgemein so üblich ist, kommt mir etwas komisch vor. Oder laufen grundsätzlich alle Hosting-Angebote mit PHP und MySQL in chroot-Umgebungen?

      viele Grüße

      Axel

      1. Würd ich jetzt genauer wissen. Deswegen wollte ich noch mehr Infos um sicher zu sein. Aber so weit ich weiß, beschränken sich dann diese ausführbaren Dateien auf die Dateien/Verzeichnisse deren Besitzer man ist. Hat das nicht mit Safe_Mode_Exec zu tun?

        1. Hallo,

          Aber so weit ich weiß, beschränken sich dann diese ausführbaren Dateien auf die Dateien/Verzeichnisse deren Besitzer man ist. Hat das nicht mit Safe_Mode_Exec zu tun?

          Nein, wenn bei PHP safe_mode != "0", also true ;-)), ist, dann können externe Programme nur ausgeführt werden , wenn sie im Verzeichnis liegen, welches safe_mode_exec_dir angibt.

          Meine Frage an Christian war:
          Bedeutet das im Umkehrschluss automatisch, dass man mit safe_mode == "0" das System via PHP anweisen kann, beliebige Binary-Files aus seinem eigenen user-home ausführen zu lassen und ist das so üblich?

          Dass man Programme ausführen kann, die root auf dem Server zur verfügungs stellt (ls, whoami, less, grep, ... und, wenn vorhanden, auch unzip) ist klar. Aber kann man einfach eigene Programme hochladen und ausführen?

          viele Grüße

          Axel

          1. 你好 Axel,

            Meine Frage an Christian war:
            Bedeutet das im Umkehrschluss automatisch, dass man mit safe_mode == "0"
            das System via PHP anweisen kann, beliebige Binary-Files aus seinem
            eigenen user-home ausführen zu lassen und ist das so üblich?

            Ja und Ja. Wie gesagt, man kann so ohne weiteres gar nichts dagegen tun.
            Wenn man die Binary entsprechend linkt und fuer den richtigen Prozessor
            und das richtige System compiliert ist das bei den meisten Providern
            moeglich; tatsaechlich faellt mir keiner ein, wo es nicht moeglich waere.

            Die einzige Ressourcen-schonende Moeglichkeit, das zu verhindern, waere
            exec() & Co auszuschalten, wobei man damit dann nur verhindert, dass die
            Dateien per PHP ausgefuehrt werden koennen; mit Perl ginge es immer noch,
            da gibt es keinen Mechanismus, Funktionen zu deaktivieren, allerdings
            wird da meist SuExec eingesetzt, womit der Code dann mit den Rechten
            des Users, der das hochlaedt, ausgefuehrt wird.

            再见,
            克里斯蒂安

            --
            "Ich muss auflegen, mein Essen ist gleich fertig."
            "Oh, was gibt 's denn?"
            "Hmm. Die Packung liegt schon im Muell, keine Ahnung.
            1. Hallo,

              Ja und Ja. Wie gesagt, man kann so ohne weiteres gar nichts dagegen tun.
              Wenn man die Binary entsprechend linkt und fuer den richtigen Prozessor
              und das richtige System compiliert ist das bei den meisten Providern
              moeglich; tatsaechlich faellt mir keiner ein, wo es nicht moeglich waere.

              Ja, nachdem ich etwas drüber nachdenke und mir einfällt, dass man ja auch vollen chmod-Zugriff auf files in seinem eigenen home hat, ist das logisch. Zumindest haben die Programme dann ja nur die Berechtigungen des users, der sie (den Prozess) startet. Zumindest, wenn keine SUID bzw. SGID-Attribute gesetzt sind.

              Die einzige Ressourcen-schonende Moeglichkeit, das zu verhindern, waere

              Hm, man könnte aber den Nutzern chmod und den direkten FTP-Zugang verbieten und gleichzeitig ein Upload-Tool zur Verfügung stellen, welches bei allen hochgeladenen Files die execute-Permissions für user group und others null setzt.

              viele Grüße

              Axel

              1. 你好 Axel,

                Die einzige Ressourcen-schonende Moeglichkeit, das zu verhindern, waere

                Hm, man könnte aber den Nutzern chmod und den direkten FTP-Zugang
                verbieten und gleichzeitig ein Upload-Tool zur Verfügung stellen,
                welches bei allen hochgeladenen Files die execute-Permissions für user
                group und others null setzt.

                Ja, das ist eine gute Idee, dass mach mal Heinz Kuntz aus Hinterschwabingen
                klar, der gerne per Knopfdruck synchronisieren will ;-)

                再见,
                克里斯蒂安

                --
                Mensch zu Mathematiker: "Ich finde Ihre Arbeit ziemlich monoton". Mathematiker: "Mag sein! Dafür ist sie aber stetig und unbeschränkt."
                1. Hallo,

                  Ja, das ist eine gute Idee, dass mach mal Heinz Kuntz aus Hinterschwabingen
                  klar, der gerne per Knopfdruck synchronisieren will ;-)

                  Der muss sich meinen Upload-Client herunterladen. Dann kann er das doch gerne machen ;-)).

                  viele Grüße

                  Axel

      2. 你好 Axel,

        [...] Würde es gehen wenn ich so ein Linux-unzip in das entsprechende
        Verzeichnis kopiere und mit PHP aufrufe?
        Klar, warum nicht?
        Ist das wirklich so usus, dass der Nutzer eines Web-Hosters beliebige
        Binary-Files bzw. sogar Packages in seinem User-Home ausführen darf? Oder
        weißt Du es jetzt speziell für von diesem Anbieter.

        Es ist gar nicht so ohne weiteres verhinderbar. Man kann immer irgendwie
        Code hochladen und ausfuehren, wenn man Zugriff (z. B. FTP, SSH oder sowas)
        auf den Server hat. Deshalb ist es auch ein relativ grosses Risiko, einen
        Server fuer Shared-Hosting bereitzustellen.

        Die Vorstellung, dass das allgemein so üblich ist, kommt mir etwas
        komisch vor. Oder laufen grundsätzlich alle Hosting-Angebote mit PHP und
        MySQL in chroot-Umgebungen?

        *lol* nein, wirklich nicht, ich wage sogar zu behaupten, dass viele
        “Administratoren” nichtmal eine chroot-Umgebung einrichten koennen.

        Wenn man es richtig[tm] machen will, benutzt man pro User ein FreeBSD-Jail
        mit eigenem Apachen auf einem eigenen Port und laesst den HTTP-Verkehr
        ueber z. B. den Squid-Proxy an den richtigen Port weiterleiten. Kostet
        allerdings massig Ressourcen, ist dafuer dann aber auch sicher.

        再见,
        克里斯蒂安

        --
        Das Leben ist wie ein Kartenspiel: was dir gegeben wurde, ist vorbestimmt. Doch wie du damit spielst, ist deine Entscheidung.
  2. Irgendwie schaffe ich es nicht die Datei zu entpacken. Es klappt  zwar wenn die unzip.exe und die zip-datei im selben Verzeichnis liegen. Aber es soll so nicht sein.

    Die Verzeichnisse
    .
    ..
    Admin
    Upload...

    Und darin die Dateien
    Admin/unzip.exe
    Admin/unzip.php
    Upload/File.zip

    Habe alles mögliche versucht, klappt aber einfach nicht, wieso?
    unzip ../Upload/File.zip
    unzip /Upload/File.zip
    unzip Upload/File.zip

    Admin/unzip ../Upload/File.zip
    /Admin/unzip ../Upload/File.zip
    /Admin/unzip /Upload/File.zip
    /Admin/unzip /Upload/File.zip
    Admin/unzip Upload/File.zip
    ...

    1. 你好 Giovanni,

      Irgendwie schaffe ich es nicht die Datei zu entpacken. Es klappt  zwar
      wenn die unzip.exe und die zip-datei im selben Verzeichnis liegen. Aber
      es soll so nicht sein.
      [...]

      Arbeite mit absoluten Pfad-Angaben, sowohl bei der Angabe zur Zip-Binary
      als auch zur Zip-Datei. Auch solltest du einen absoluten Pfad angeben,
      wohin die Dateien entpackt werden sollen, also z. b. so:

      system("/usr/bin/unzip /path/to/file.zip -d /extract/here/");

      再见,
      克里斯蒂安

      --
      Echte Hacker benutzen Aexte. (Thomas Walter in de.org.ccc)
      1. Aber ich arbeite doch die ganze Zeit mit absoluten Pfad-Angaben.

        .
        ..
        Admin
        Upload

        Das ist mein Root (sprich auf der Festplatte sieht es so aus:
        xampp\htdocs\Admin
        xampp\htdocs\Upload
        ...

        1. Aber ich arbeite doch die ganze Zeit mit absoluten Pfad-Angaben.

          .
          ..
          Admin
          Upload

          Das ist mein Root (sprich auf der Festplatte sieht es so aus:
          xampp\htdocs\Admin
          xampp\htdocs\Upload
          ...

          Also es ist komisch, ich gebe in der Konsole das ein, uns es funktioniert:
          unzip ../Upload/Galerie.zip
          füge ich es ins PHP-Script ein, gehts nicht. Verschiebe ich aber alle Dateien ins selbe Verzeichnis und führe den Befehl aus
          unzip Galerie.zip
          klappt alles wunderbar. Ich find einfach den Fehler nicht!

          1. 你好 Giovanni,

            Also es ist komisch, ich gebe in der Konsole das ein, uns es
            funktioniert:
            unzip ../Upload/Galerie.zip
            füge ich es ins PHP-Script ein, gehts nicht. Verschiebe ich aber alle
            Dateien ins selbe Verzeichnis und führe den Befehl aus
            unzip Galerie.zip
            klappt alles wunderbar. Ich find einfach den Fehler nicht!

            Wie gesagt, arbeite mit _vollstaendigen_ Pfaden. Nicht einfach "unzip",
            sondern c:/path/to/unzip c:/path/to/file.zip -d c:/temp/

            再见,
            克里斯蒂安

            --
            Ich bewundere wirklich den Sinn der Bienen für kollektive Verantwortung. Obwohl sich einzelne Bienen hin und wieder bekämpfen, herrscht zwischen Ihnen grundsätzlich ein starkes Gefühl für Eintracht und Zusammenarbeit. Wir Menschen gelten als sehr viel weiter entwickelt, doch mitunter rangieren wir sogar hinter kleinen Insekten.
            1. 你好 Giovanni,

              Also es ist komisch, ich gebe in der Konsole das ein, uns es
              funktioniert:
              unzip ../Upload/Galerie.zip
              füge ich es ins PHP-Script ein, gehts nicht. Verschiebe ich aber alle
              Dateien ins selbe Verzeichnis und führe den Befehl aus
              unzip Galerie.zip
              klappt alles wunderbar. Ich find einfach den Fehler nicht!

              Wie gesagt, arbeite mit _vollstaendigen_ Pfaden. Nicht einfach "unzip",
              sondern c:/path/to/unzip c:/path/to/file.zip -d c:/temp/

              Und wie soll dass dan später auf dem Server funktionieren?
              Das funktioniert, wieder nicht. Ich kopier die funktionierende Zeile aus der Eingabeaufforderung ins Script und das Script funktioniert nicht. Obwohl wirklich absolut
              system("L:/Admin/unzip L:/Upload/Galerie.zip -d L:/Upload/");

              L: = Netzwerkpfad

              1. 你好 Giovanni,

                Und wie soll dass dan später auf dem Server funktionieren?

                Da musst du die Pfade dann wieder anpassen.

                Das funktioniert, wieder nicht. Ich kopier die funktionierende Zeile aus
                der Eingabeaufforderung ins Script und das Script funktioniert nicht.
                Obwohl wirklich absolut
                system("L:/Admin/unzip L:/Upload/Galerie.zip -d L:/Upload/");

                L: = Netzwerkpfad

                Hast der Webserver die noetigen Rechte? Was sagt das errorlog? Hast du
                dir schonmal den Output des Programms ausgeben lassen?

                再见,
                克里斯蒂安

                --
                Fortune: Manly's Maxim:
                Logic is a systematic method of coming to the wrong conclusion
                with confidence.
                1. Hab den Fehler gefunden, weiß aber nicht wie er entsteht:

                  // So geht das ganze nicht
                  if ((Upload()) && (Unzip()) && (UpdateDB())) Message("Datenbank wurde erfolgreich aktualisiert!");

                  // So geht das ganze
                  Upload();
                  Unzip();
                  UpdateDB();

                  Ich kapiert das nicht, der muß doch die Funktionen in der Abfrage genauso aufrufen!

                  1. Hallo,

                    Hab den Fehler gefunden, weiß aber nicht wie er entsteht:

                    // So geht das ganze nicht
                    if ((Upload()) && (Unzip()) && (UpdateDB())) Message("Datenbank wurde erfolgreich aktualisiert!");
                    Ich kapiert das nicht, der muß doch die Funktionen in der Abfrage genauso aufrufen!

                    Nein. Eine UND-Verknüpfung ist dann true, wenn _alle_ verknüpften Werte true ergeben. Sobald _ein_ Wert false liefert, ist die gesamte UND-Verknüpfung false. Um den Ausdruck in if(Ausdruck) zu prüfen, muss also _nur_ bis zur ersten Rückgabe von false geprüft werden. Liefert Upload() bereits false, dann ist Ausdruck == false und die restlichen Funktionen Unzip() und UpdateDB() werden nicht ausgeführt, weil ihre Rückgabewerte nicht mehr von Belang sind.

                    viele Grüße

                    Axel

                    1. Achso, ist vernünftig gemacht. Nachdem ich das ja weiß, kann ich das einfach ein bißchen anders schreiben. Danke für die Hilfe!