Datei auf Server entpacken
Giovanni Rena
- php
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
你好 Giovanni,
[...] Würde es gehen wenn ich so ein Linux-unzip in das entsprechende
Verzeichnis kopiere und mit PHP aufrufe?
Klar, warum nicht?
再见,
克里斯蒂安
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?
你好 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?
再见,
克里斯蒂安
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
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?
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
你好 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.
再见,
克里斯蒂安
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
你好 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 ;-)
再见,
克里斯蒂安
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
你好 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.
再见,
克里斯蒂安
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
...
你好 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/");
再见,
克里斯蒂安
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
...
Aber ich arbeite doch die ganze Zeit mit absoluten Pfad-Angaben.
.
..
Admin
UploadDas 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!
你好 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/
再见,
克里斯蒂安
你好 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
你好 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?
再见,
克里斯蒂安
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!
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
Achso, ist vernünftig gemacht. Nachdem ich das ja weiß, kann ich das einfach ein bißchen anders schreiben. Danke für die Hilfe!