große datenmengen zippen
narrenkappe
- php
0 Rouven0 nuxodin0 Cybaer0 narrenkappe0 Cybaer0 narrenkappe0 Cybaer
hallo,
kann ich mehrere 100mb mit php oder ähnlicher scriptsprache onthefly zippen????
ich hab nämlich eine große bildergalerie mit mehreren tausend bildern zu erstellen, wo jeder user seine bilder makieren und dann gezippt laden kann.
für hilfe wäre ich dankbar, da ich schon verschieden methoden ausprobiert habe.
lg
Hello,
ASP.NET kann zumindest, dort würde dir der .NET ZipLib kannst du den gezippten Output direkt an den Client senden ohne dazu eine temporäre Datei o.ä. zu benötigen.
MfG
Rouven
hallo
bei neueren php-Versionen gibt es die Klasse "ZipArchive" allerdings kann die nicht von Haus aus ganze Ordner zippen.
Desshalb habe ich da mal die Klasse erweitert:
class superZipArchive extends ZipArchive {
public function open($filename, $flags = null){
$this->qgFilename = $filename;
return parent::open($filename, $flags);
}
public function addDir($dir, $localname = null, $regexpExclude = null){
if($localname === null){ $localname = basename($dir); }
$iter = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir ), true );
$i = 0;
foreach ( $iter as $file ){
if($regexpExclude AND preg_match($regexpExclude, $file)){ continue; }
if(++$i > 50){ // **
$i = 0;
$this->close();
$this->open( $this->qgFilename, ZipArchive::CREATE );
}
$path = $localname.substr($file,strlen($dir));
$this->addFile( $file, $path );
}
}
}
** allerdings hat die Klasse Probleme mit vielen Dateien, desshalb baue ich einen Zähler ein um immer nach 50 Dateien das Zip zu schliessen und wieder neue zu eröffnen.
Hi,
kann ich mehrere 100mb mit php oder ähnlicher scriptsprache onthefly zippen????
Mit meinem ZIP (funktioniert mindestens ab PHP 4.01) habe ich schon ganze Websites gepackt (mit viiieeeelen Dateien und weitaus mehr als 100 MB). Ist aber natürlich auch eine Frage, welche Berechtigung/Resourcen dir konkret zur Verfügung stehen!
Ansonsten: Wenn serverunabhängige Funktionalität nicht wichtig ist, dann wäre der schnellste Weg sicher, ein ZIP-Programm des Servers direkt aufzurufen
Gruß, Cybaer
Mit meinem ZIP (funktioniert mindestens ab PHP 4.01) habe ich schon ganze Websites gepackt (mit viiieeeelen Dateien und weitaus mehr als 100 MB). Ist aber natürlich auch eine Frage, welche Berechtigung/Resourcen dir konkret zur Verfügung stehen!
Das Script funktioniert soweit ganz gut. Allerdings erstellt es zwei Dateien.
Kann ich auch einzelne Dateien damit zippen, da ich nicht 6GB Fotos zippen möchte
Ansonsten: Wenn serverunabhängige Funktionalität nicht wichtig ist, dann wäre der schnellste Weg sicher, ein ZIP-Programm des Servers direkt aufzurufen
exec("zip ".$_SERVER['DOCUMENT_ROOT']."/zzz.zip ".$_SERVER['DOCUMENT_ROOT']."/index.html"));
Mit obigem Beispiel hab ich es Versucht und da ich kein Resultat sehen konnte, nehme ich an, dass ich diese Version nicht anwenden kann.
Gruß
narrenkappe
Hi,
Das Script funktioniert soweit ganz gut. Allerdings erstellt es zwei Dateien.
Wie meinst Du das? Welche "zwei" Dateien?
Kann ich auch einzelne Dateien damit zippen, da ich nicht 6GB Fotos zippen möchte
Ja. Du kannst als Quelle einen String mit einem Pfad übergeben, einen Leerstring (oder nichts) für den aktuellen Pfad, einen String mit einem Dateinamen, oder ein Array mit Dateinamen.
Du kannst also nicht nur einzelne Dateien zippen, sondern auch eine beliebige Liste erstellen, und dann diese Dateien zippen.
Gruß, Cybaer
Hi,
Wie meinst Du das? Welche "zwei" Dateien?
$newzip=$z->zip($_SERVER['DOCUMENT_ROOT'].'/index.html',"my.zip",FALSE,FALSE);
Mit dieser Zeile hab ich es Versucht==> es gab eine html.zip und eine my.zip.
in der html.zip war einfach das ganze Verzeichnis mit unterverzeichnissen drinne, in dem anderen noch eine index.html im "Wurzelverzeichnis". Zusätzlich dazu waren noch alle weiteren Dateien doppelt vertreten.
lg und vielen Dannk für die Mühe
narrenkappe
Hi,
Mit dieser Zeile hab ich es Versucht==> es gab eine html.zip und eine my.zip.
Ich schau mir das mal an - habe aber mom. keine Zeit dafür (frühestens morgen - wahrscheinlich aber erst Anfang nächster Woche). Bis dahin kann ich dir nur den Tip gegen, es mal mit dem Nachfolger zu versuchen ...
Gruß, Cybaer