Mailinglisten-Archive |
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