Klaus1: PHP-Zippen von großen Dateien schlägt fehl

Beitrag lesen

Hallo,

über ein Formular kann ein Anwender beliebig viele Dateien hochladen. Zusätzlich kann er entscheiden, ob die Dateien nach dem Upload in einer einzelnen Zip-Datei zusammengefasst werden sollen.

Das Zippen funktioniert bei kleinen Dateien problemlos, aber bei größeren Dateien erhalte ich Fehlermeldungen.

Ich hatte es zu Beginn mit dem Standard-PHP ZipArchive versucht, bin dann aber aus Performance-Gründen zum OS-Kommando gewechselt.

Der Code sieht im Moment wie folgt aus:

		$target_path = "/srv/www/htdocs/test/upload/".$folder;
		$zip_name = $target_path."/".$folder;
		$zip_target = $target_path."/*";
		$fp = popen("zip $zip_name -0 -j -q $zip_target", "r");
		fpassthru($fp);

		// Dateien im Folder können jetzt gelöscht werden
		foreach (new DirectoryIterator($target_path) as $fileInfo) {
			if ((!$fileInfo->isDot()) AND ($fileInfo->getFilename() != $folder.".zip")) {
				unlink($fileInfo->getPathname());
			}
		}

Die Fehlermeldung lautet wie folgt:

zip I/O error: No such file or directory zip error: Could not create output file (was replacing the original zip file)

Kann es sein, dass die Dateien bereits gelöscht werden, während der Zip-Prozess noch läuft? Kann ich das irgendwie sicherstellen, dass erst gelöscht wird, wenn der Prozess durch ist?

Kann ich eventuell schon beim Upload (ich lade die Dateien "schnipselweise" hoch) die Datei-Schnipsel (Chunks) in die Zip-Datei packen?

LG

Klaus