This code can generate a zip file in memory and push it out to a browser. It is suited for highly dynamic environments where eg different access rights for users make "static" zip files impossible.
This library is an extension of the work done by Devin Doucette published by phpclasses.org. It has been tested and proved to be very reliable, also under high load.
There is a german blog post Zipdateien on-the-fly erstellen mit PHP which explains the usage in Detail.
Some Examples:
<?php
// Archivklasse einbinden:
require_once ('lib/archive.php');
// Objekt erzeugen. Das Argument bezeichnet den Dateinamen
$zipfile= new zip_file('Meine Zipdatei.zip');
// Die Optionen
$zipfile->set_options(array (
'basedir' => "/home/me/toZip/", // Das Basisverzeichnis. Sonst wird der ganze Pfad von / an im Zip gespeichert.
'followlinks' => 1, // Symlinks sollen berücksichtigt werden
'inmemory' => 1, // Die Datei nur im Speicher erstellen
'level' => 6, // Level 1 = schnell, Level 9 = gut
'recurse' => 1, // In Unterverzeichnisse wechseln
// Wenn zu grosse dateien verarbeitet werden, kannes zu einem php memory error kommen
// Man sollte nicht über das halbe memory_limit (php.ini) hinausgehen
'maxsize' => 12*1024*1024 // Nur Dateien die <= 12 MB gross sind zippen
));
// Alle Dateien im Verzeichnis /home/me/toZip/Stuff hinzufügen
// Alle ".doc" Dateien und alle Ordner im Verzeichnis /home/me/toZip/Letters hinzufügen
$zipfile->add_files(array("Stuff", "Letters/*.doc"));
// Alle ".tmp" dateien in Stuff ausschliessen
$zipfile->exclude_files("htdocs/*.tmp");
// Alle Dateien in ".svn" und "CVS" Verzeichnissen ausschliessen (Regular Expressions)
$zipfile->exclude_regexp_files('.*/CVS|.*/CVS/.*|.*/\.svn|.*/\.svn.*');
// Archiv erstellen
$zipfile->create_archive();
// Archiv zum Download anbieten
$zipfile->download_file();
// Oder speichern (vielen Dank an PHPler!!!)
$zipfile->save_file('myzip.zip', $path = '/tmp/');
?>
Downloads