[Perl/PHP] Datei in Zip packen

Enzio

Lt. Junior Grade
Registriert
Aug. 2003
Beiträge
410
Also ich hab auf meinem Webserver zwar Zlib installiert, aber ich kann wohl nix neues erstellen, sondern bloß entzippen.

Ich hab gelesen das es mit PERL wohl immer gehen sollen.

Ich hab jetzt schon zig Seiten durch mit Google, es kommt auch viel, aber nie das was man gebrauchen könnte.

Ich kann gar nix in Perl. Ich bräuchte halt jetzt erstmal ne Datei wo drin steht, welche Datei er zippen soll und wo er das dann ausgibt. Das ganze sollte nach möglichkeit funktionieren :freak:

Hat der wer was auf Lager?
 
Wenn du Linux hast - ganz einfach:
Hol die Packete Zip/Unzip
Code:
Debian:
apt-get update
apt-get install zip unzip

Dann kannste in der Shell das ganze verwursteln:
PHP:
$errTmp = "/tmp/zip.stderr";
$cmd = `/usr/bin/zip myZipFile komprimiere.txt 2>$errTmp`;
if(filesize($errTmp) != 0) {
  exit(file_get_contents($errTmp));
}

Erstellt die Datei: myZipFile.zip
 
Hallo!

Eine fertige Klasse (by Denis O.Philippov, webmaster@atlant.ru, http://www.atlant.ru) findest du im Anhang ([/b]zip.class.inc[/b].zip).

Beispiel:

PHP:
<?php
include ( "zip.class.inc.php" );

$zipfile = new zipfile(); // Neues Objekt definieren

// Hier nun jeweils Dateien hinzufügen, erster Parameter soll der Inhalt
// der Datei sein, zweiter Parameter der Dateiname

$zipfile->add_file ( "Hallo Welt!" , "hallo.txt" );
$zipfile->add_file ( "Do not try this at home!" , "warning.txt" );



// Mit den folgenden Headern und der anschließenden Ausgabe der Zip-Datei
// mit $zipfile->file() wird direkt der Dateidownload der ZIP-Datei gestartet.

 header("Content-type: x-application/octet-stream");
 header("Content-disposition: attachment; filename=\"MeineErsteZipDatei.zip\"");
 header("Content-length: ".strlen($zipfile->file()));
 echo $zipfile->file();

?>
 

Anhänge

  • zip.class.inc.zip
    2 KB · Aufrufe: 301
Nachteil von dem Script: Du könntest theoretisch so viel packen wie dein PHP-Script RAM benutzen darf (normal: 8MB). Praktisch werden es jedoch viel weniger sein, da beim Hinzufügen von Dateien ein paar Variablen doppelt im RAM sind, welche die Daten speichern:
$data: Dateiinhalt
$zdata: Komprimierte Daten
$fr: file-record (enthält $zdata)
Alle 3 Variablen müssen gleichzeitig ins RAM passen.

Also wenn die Dateien größer als 3-5 MB sind, dann unbedingt drauf achten.
 
Zurück
Oben