Zip-Klasse funktioniert nicht richtig
misterunknown
- php
0 misterunknown0 tami0 ChrisB
Moin,
ich habe im Internet folgende PHP-Klassen gefunden, die es ermöglichen sollen ZIP-Archive zu erstellen.
http://pastebin.com/QZc978Sc
Mein PHP-Code dazu sieht folgendermaßen aus:
unset($zip);
$dfile = uniqid("epfm") . ".zip";
$zip = new zip_file($dfile);
$zip->add_files($filename);
$zip->create_archive();
header("Content-Disposition: attachment; filename=\"".normalFileName($_POST["filename"]).".zip\"");
echo file_get_contents($dfile);
unlink($dfile);
In $filename ist immer ein gültiger Name eines Verzeichnisses. Die Datei, die heruntergeladen wird ist eine gültige Zip-Datei, die sich normal entpacken lässt. Alles funktioniert eigentlich prima, bis auf die Tatsache, dass bei manchen Verzeichnissen nicht alle Dateien enthalten sind.
Beispiel:
Ich habe ein Verzeichnis "img". In diesem Verzeichnis sind 7 Dateien mit einer Gesamtgröße von ~3MB. Wenn ich diesen Ordner nun versuche gezippt downzuloaden sind in dem Archiv nur 4 Dateien. Es ist auch nicht so, dass es nur die ersten 4 Dateien oder die letzten 4 sind. Es sind einfach scheinbar wahllos 4 Dateien, die aber beim wiederholen gleich bleiben. Ich kann mir das nicht erklären. Hat von euch jemand eine Idee? Mach ich etwas falsch? Oder ist ein Fehler in einer der Klassen?
Grüße Marco
Moin,
unset($zip);
$dfile = uniqid("epfm") . ".zip";
$zip = new zip_file($dfile);
$zip->add_files($filename);
$zip->create_archive();
header("Content-Disposition: attachment; filename="".normalFileName($_POST["filename"]).".zip"");
echo file_get_contents($dfile);
unlink($dfile);
Statts $\_POST["filename"] müsste hier natürlich auch $filename stehen, das kommt daher, dass ich es mit einem festen Wert probiert habe, um sicherzugehen, dass es nicht an den Variablen liegt.
Grüße Marco
hi,
vielleicht limitierst du dich ja selbst mit einer der Config-Einstellungen?
$this->options = array(
'basedir' => ".",
'name' => $name,
'prepend' => "",
'inmemory' => 0,
'overwrite' => 0,
'recurse' => 1,
'storepaths' => 1,
'followlinks' => 0,
'level' => 3,
'method' => 1,
'sfx' => "",
'type' => "",
'comment' => "",
'maxsize' => memory_get_usage()
);
zB. "level" oder "maxsize"?
mfg
tami
Hi,
$this->options = array(
'maxsize' => memory_get_usage()
Das sieht mir generell ziemlich unlogisch aus.
memory_get_usage liefert die Anzahl an Bytes, die ein Script gerade in Beschlag nimmt. Je ressourcen*schonender* das Script bis zu diesem Zeitpunkt gearbeitet hat, desto *geringer* wird hier also auch der maxsize-Parameter angesetzt.
MfG ChrisB