[PHP] Klasse zum zip-File erstellen

BartTheDevil89

Devilution Media
ID: 87739
L
2 Mai 2006
3.960
103
Hallo,

ich bin jetzt schon seit längerem auf der Suche nach einer php-Klasse mit Hilfe derer ich ein zip-File erstellen kann inkl. Ordnern, etc. darin eben.

Ich habe mittlerweile zwar schon einige probiert: https://clinhart.mirrors.phpclasses.org/browse/package/2322.html

Allerdings komm ich immer wieder zum gleichen Problem: Mit dem einfachen Windows Editor lässt sich eine php-Datei zum Beispiel öffnen und der Inhalt passt auch. Aber das öffnen mit Notepad++ zum Beispiel, also auch ausführlicheren Programmen führt zum Absturz bzw. unter Vista zur Meldung, dass das Programm nichtmehr funktioniert.

Habt ihr Ideen woran das liegen kann? Denn es werden beispielweise auch keine Erstellungsdaten und so mit bei den Dateien angegeben. Oder kennt ihr eine Klasse, die problemlos funktioniert?

Das Thema Performence, Sicherheit oder so ist völlig unwichtig, das das ganze offline aufm localhost laufen soll und nie online kommen wird.
Es ist viel wichtiger, dass eben die Dateien überall geöffnet werden können, etc.

Danke:D
 
Moin, evtl is das was für dich .. da werden auch ordner gezippt :)

b1gZIP ist ein dynamisch ladbares Modul für PHP, welches eine extrem schnelle Erstellung von ZIP-Archiven erlaubt. Das b1gZIP-Modul wird zum Beispiel bei der Erstellung der Downloadarchive von b1gMail verwendet — so ist es uns möglich, jedes Downloadarchiv persönlich auf den jeweiligen Kunden zuzuschneiden.

Mit Hilfe von b1gZIP erstellen wir Downloadarchive mit ca. 6 MB Datenmenge "On The Fly" bei einem Klick auf "Download" in weniger als einer Sekunde — dies wirkt für den Benutzer wie ein ganz normaler Download und ist fasr genau so schnell.

b1gZIP basiert auf der C++-ZipArchive-Bibliothek von Artpol Software und ist komplett kostenlos. Der gesamte Quellcode ist unter der PHP-Lizenz verfügbar.
Funktionen

Momentan stellt das b1gZIP-Modul 3 Funktionen bereit. Mit Hilfe dieser Funktionen ist ein einfaches, unkompliziertes Erstellen einer ZIP-Datei möglich.

* resource b1gzip_create ( void )
Diese Funktion initialisiert das ZIP-Archiv im Speicher und gibt als Rückgabewert eine Resource zurück, die bei den weiteren Funktionen benötigt wird.
* void b1gzip_add ( resource zipfile, string data, string zipname )
Diese Funktion fügt eine neue Datei in die ZIP-Datei ein. Der Parameter zipfile ist die von b1gzip_create zur¨ckgegebene Resource. Der Parameter data ist der Inhalt der hinzuzufügende Datei, zipname der Name der Datei im ZIP-Archiv. Hier können auch Verzeichnisse verwendet werden. Beispiel: "test.txt" oder "ordner/unterordner/bild.jpg".
* string b1gzip_final ( resource zipfile )
Diese Funktion schließt die Erstellung der ZIP-Datei ab und gibt den Inhalt der erstellten ZIP-Datei zurück. Dieser Inhalt kann z.B. mit fopen/fwrite/fclose in eine Datei gespeichert werden.

URL: https://www.b1g.de/products/b1gzip/
 
Hast Du Dir die schon mal angeschaut?
Habe ich grad per Google gefunden, es gibt zwar paar kleinere Fehler aber nix schlimmes, was denke ich bisher schon ausgebessert wurde.

Hier noch ein Link wo einer ein Archiv erstellt.
 
Wofür ne Klasse nutzen, wenn es als Komponente bereits in PHP integriert ist?
Zumal, es deutlich schneller ist.

Achso,und nicht addFile nutzen, sondern addFromString, denn addFile hat leider ne Limitierung, die nicht angegeben ist, das Erstellen von zu großen Archiven failed auf Windows einfach irgendwann.
 
Wofür ne Klasse nutzen, wenn es als Komponente bereits in PHP integriert ist?
Zumal, es deutlich schneller ist.

Achso,und nicht addFile nutzen, sondern addFromString, denn addFile hat leider ne Limitierung, die nicht angegeben ist, das Erstellen von zu großen Archiven failed auf Windows einfach irgendwann.

Ah.....man lernt nie aus. ;)
Hatte nicht gedacht, dass da schon eine drin ist und meine Suche über google hatte mich auch zu Klassen gebracht, die eben mich zu meinem halb-fertigem Ergebnis gebracht hat.
Aber mit der php-Lösung läuft es. Danke auch für den Tipp mit addFromString.
Allerdings ein Problem gibts noch: addEmptyDir läuft nicht. Also er erstellt keine leeren Verzeichnisse und laut den Comments darunter scheint das ja irgendwie grundsätzliche Probleme zu haben. Hast du dafür auch noch ne Lösung? :roll:

EDIT: Problem zwar nicht gelöst, aber meine ersten Tests hab ich online gemacht und da lief es nicht. Aufm localhost, den ich gestern nicht dabei hatte, geht es jetzt ohne Probleme. Also die Funktion scheint je nach Serverart Probleme zu haben.
 
Zuletzt bearbeitet:
Also er erstellt keine leeren Verzeichnisse und laut den Comments darunter scheint das ja irgendwie grundsätzliche Probleme zu haben. Hast du dafür auch noch ne Lösung? :roll:
ich bin nie auf die Idee gekommen leere Verzeichnisse zu erstellen :LOL:
Nur ne Idee, keine Ahnung ob es funktioniert: ein Dummy-File erstellen in den leeren Ordner und daraufhin wieder das file löschen, vllt bleibt der Ordner ja drinne


Also die Funktion scheint je nach Serverart Probleme zu haben.
Also Windows macht mehr Probleme als Linux :biggrin:
Das Problem ist eben, dass die PHP-Klassen einfach zu langsam sind, da habe ich mit 20MB Archiven, welche knapp 2000 Dateien hatte, jeweils einen Timeout erreicht, ohne Timeouts waren die nach ner halben Stunde immernoch net fertig.
 
ich bin nie auf die Idee gekommen leere Verzeichnisse zu erstellen :LOL:
Nur ne Idee, keine Ahnung ob es funktioniert: ein Dummy-File erstellen in den leeren Ordner und daraufhin wieder das file löschen, vllt bleibt der Ordner ja drinne
Achso stimmt das hätte man versuchen können...aber wie gesagt aufm localhost geht die Funktion jetzt auch. Will ne komplette Ordnerstruktur nachvollziehen und brauche eben deswegen auch ne Funktion um nen leeren Ordner mit einzubeziehen.;)

Also Windows macht mehr Probleme als Linux :biggrin:
Das Problem ist eben, dass die PHP-Klassen einfach zu langsam sind, da habe ich mit 20MB Archiven, welche knapp 2000 Dateien hatte, jeweils einen Timeout erreicht, ohne Timeouts waren die nach ner halben Stunde immernoch net fertig.

Der mit dem Problem war aber ein Linux und es ging nur um 100kb...:p