zip datei splitten

DrBonsai

Mitglied
N'Abend zusammen,

ich habe eine Zip-Datei, die ein xml-file enthält. Das würde ich gerne auf dem Server entpacken, um hinterher damit rumsoielen zu können.
Ich entpacke mit $zip->extractTo($array_files_to_download[$current_array_pointer].'/'); Alles kein Problem, solange, bis die zip-Datei kleiner als 3MB ist. Wenn sie größer wird, werden mir nur 31457280 bytes entpackt. Der Rest steht nicht in meiner entpackten Datei drin.

Ich habe mir also überlegt, die Zip-Datei zu splitten und sie dann scheibchenweise zu entpacken.
Geht sowas?

Mein Ansatz war der Folgende:

PHP:
$datei = "insidedescription_cs.zip";
$size = filesize($datei);
$parts = ceil($size/(500*1024));
$length_of_sub_document = ceil($size / $parts);

for($i = 0; $i<$parts; $i++)
	{
	$start_position = $i * $length_of_sub_document;
	$sub_zip = file_get_contents($datei, NULL, NULL, $start_position, $length_of_sub_document);
	unlink("test/".$i.$datei);
	$sub_document = fopen("test/".$i.$datei, 'w');
	fwrite($sub_document, $sub_zip);
	}
Ich hole ir also die Größe meiner Datei, gucke in wieviele Teile ich sie zerschneiden muss, die alle nicht Größer als 500kB sind.
Dann lese ich den Inhalt der Datei bis zur definierten Länge in einen string, erstelle eine neue Datei, mit Endung .zip und speichere sie ab. Diesen SChritt wiederhole ich, bis zum Ende meiner ursprünglichen Datei.

Problem:
Wenn ich versuche meine Scheibchen zu entpacken, bekomme ich die Fehlermeldung, dass die zip Dateien nicht gültig seien.

Ist meine Idee grundsätzlich durchführbar, oder kann man sowas mit zip-Dateien einfach nicht machen?

mfg,
David
 
Hi

nein, das kann man nicht machen.
Weder mit Zip noch mit irgendeinem anderen vergleichbaren Format.
Und das sind keine absichtlichen Beschränkungen, da können die Erfinder auch nichts dafür.

Gibts bei den zu großen Dateien irgendwelche Fehlermeldungen, wenn du error_reporting und display_errors auf E_ALL bzw. 1 setzt?
 
Hi,
danke erstmal für die rasche Antwort.
Es gibt keine Fehlermeldung von Seiten php. Das Script bricht einfach ab.
 
Hi saftmeister,

Webserverlogfiles? Wie komme ich daran? Ich habe meine Seite bei strato gehostet.. Kann ich die dann abfragen?

Was hat es denn mit dieser ominösen Zahl 31.457.280 auf sich? Wenn ich das google bekomme ich einige Einträge, die sich auf ähnliche Probleme beziehen?

Mein memory_limit liegt bei 104M, das kann es also auch nicht sein.
Hat noch jemand eine Idee?
(Bei strato erreiche ich niemanden).
mfg,
David
 
Nein, das ist es auch nicht.

Ich lade ja die zip-files hoch, via ftp. und die sind maximal 3MB groß...
Ich habe mal nen Auszug aus phpinfo() gepostet. Aber das ist alles nicht das Problem, oder übersehe ich irgendwas?

Auszug aus phpinfo:

Code:
max_file_uploads	20	20
max_input_nesting_level	64	64
max_input_time	60	60
memory_limit	104M	104M
open_basedir	no value	no value
output_buffering	no value	no value
output_handler	no value	no value
post_max_size	10M	10M
precision	14	14
realpath_cache_size	16K	16K
realpath_cache_ttl	120	120
mfg.
David

EDIT:
Strato hat mir gerade noch folgendes geschrieben:

"Dies liegt an einer Beschränkung der CPU-Zeit, welche jedem Prozess zur Verfügung steht. Diese Zeit wird bei PHP-Scripten auf 20 Sekunden beschränkt. Daher kann ein Script, welches zum Beispiel in einer Schleife läuft und die ganze Zeit den Prozessor beansprucht nur für 20 Sekunden laufen, auch wenn die maximale Scriptlaufzeit auf zum Beispiel auf 30 Sekunden eingestellt ist."

Sehe ich das falsch, oder ist das Unsinn?
Mein Skript bricht nach drei Sekunden ab. An der CPU-Zeit kann es nicht liegen, oder?
 
Zuletzt bearbeitet:
Die Aussage hört sich sehr schwammig an.
Es gibt natürlich Timeouts, dennoch 3 Sekunden und dann Abbruch. So kurz ist kein Timeout standardmäßig in php eingestellt.

Hast mal zufällig mal einen anderen Browser verwendet?
Die verarschen auch gern mal einen.

Und es kommt keine Fehlermeldung wenn du am Anfang deinen PHP-Skriptes:
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);
einfügst?


Was hast du denn bei Strato? Nur Webspace, vServer oder doch einen Dedicated Server?

Gruß
 
Zurück