phpbar.de logo

Mailinglisten-Archive

[php] Berechnung der Groesse einer ZIP-Datei

[php] Berechnung der Groesse einer ZIP-Datei

Timo Schmidt php at xomit.de
Mit Jun 29 17:31:00 CEST 2005


On Wed 29 Jun 2005 16:15 +0200, Eddi wrote:
> Christoph 'knurd' Jeschke schrieb:
> > to grip webprogramming schrieb:
> > 
> > > Speichere die Ausgabe von shell_exec('zip '.$param.' - '.$dateiliste)
> > > in eine Variable, deren Länge sich mit strlen() ermitteln läßt und gib
> > > diese Variable dann aus.
> > 
> > Damit reservierst Du Speicher in der Größe der gezipten Dateien +
> > Zip-Header. Das kann a) zu lange dauern und b) zu viel Speicher belegen
> > - vorallem wenn Du große Dateien packen möchtest.
> 
> das ist richtig - nur unter der Maßgabe die Größe der entstehenden Datei
> für einen HTTP-Responseheader, der mit Priorität "SHOULD" in der
> Spezifikation daherkommt, zu ermitteln, sehe ich keine andere Möglichkeit.

ZIP ist ein definiertes Verfahren. Hierbei sind für jeden ZIP-Eintrag
und für die ZIP-Datei allgemein verschiedene zusätzliche Informationen
notwendig, die in einer gewissen (teilweise vom entsprechenden Eintrag
abhängigen, flexiblen) Länge an bestimte Stellen der ZIP-Datei
geschrieben werden. Kenne ich diese Längen, kann ich die Größe der zu
schreibenden ZIP-Datei ermittlen.

Voraussetzung dafür ist natürlich (wie im Ausgangsposting geschrieben),
dass die ZIP-Datei ohne Kompression (-0) geschrieben wird.


> Das Punkt (a) Relevanz hat, sehe ich auch nicht; zumal ich davon
> ausgehe, daß die zip-Files später mit Kompressionsfaktor 9 serviert
> werden sollen und hier die Rechenzeit auf die Ausführung des Programmes
> zip verwendet wird.

Siehe oben. Die Kompression wird mittels Schalter "-0" ausgeschalten. Mir
geht es auch nicht um Kompression sondern darum, mehrere Dateien mit
einem Downloadvorgang auf den Client zu schieben.


> Punkt (b) hängt wesentlich auch von der erwarteten Größe der
> entstehenden zip-Files ab und kann in der Tat ein Problem sein, wenn
> die Gefahr des Resourcenverbrauchst real gegeben ist.

Die Größe der einzelnen Dateien schwankt zwischen 0.5 - 30 MB, kann in
Einzelfällen auch mal über die 50 MB Grenzen steigen. Die Anzahl der
Dateien liegt zwischen einer und über 25 Dateien. Es kann also durchaus
vorkommen, dass in der Summe eine Datenmenge von über 100 MB zustande
kommt. Die in einer Variablen zu halten ist schlicht albern.  Die Daten
temporär ins Dateisystem zu schreiben bringt Umstände mit sich, die ich
vermeiden möchte: Zeitaufwand, Aufräumen der temporär geschriebenen
Dateien, Vermeidung des Überlaufs der Partition, in die die temporären
Dateien geschrieben werden, ...


  -Timo

php::bar PHP Wiki   -   Listenarchive