ZIP-Datei von Stream öffnen

the snake II

Erfahrenes Mitglied
Hallo,

ich arbeite an einer Internetseite, die Produkte darstellt, welche in einer Datenbank gespeichert sind. Es handelt sich um eine FileMaker Datenbank, die auch Dateien speichern kann.
Weil zu einem Produkt mehrere Bilder gehören, werden sie in einer ZIP Datei gespeichert.

Um diese Auszulesen, hole ich mir zunächst den Inhalt des entsprechenden Feldes, speichere den Inhalt in eine *.zip-Datei, um sie mit der Methode "ZipArchive::eek:pen" zu öffnen. Nach dem Bearbeiten wird die Datei wieder gelöscht.

Das sieht momentan so aus:

PHP:
$zipname = rand(1,9999).".zip";
while(file_exists($zipname)){
	$zipname = rand(1,9999).".zip";
}

 /* hier wird der Inhalt des DB-Feldes übergeben.
Er kann so wie er ist, in eine Datei geschrieben werden und man erhält eine gültige ZIP-Datei */
$handle = fopen($zipname,"w+");
fputs($handle,$fm->getContainerData($_GET['url']));
fclose($handle);

$zip = new ZipArchive;

$res = $zip->open($zipname);

//Hier wird mit den Dateien in der ZIP gearbeitet

$zip->close();
unlink($zipname);

Diese Vorgehensweise ist natürlich relativ zeitaufwändig, wenn man bedenkt, dass dies zur Laufzeit immer wieder ausgeführt wird.

Ich finde einfach keine Lösung, auf das ZIP-Archiv zuzugreifen, ohne es vorher in eine Datei zwischen zu speichern.
Ist es irgendwie möglich, den Stream, der mir durch "$fm->getContainerData($_GET['url']));" zur Verfügung steht, wie eine Datei zu behandeln?



Viele Grüße,

André
 
Diese Vorgehensweise ist natürlich relativ zeitaufwändig, wenn man bedenkt, dass dies zur Laufzeit immer wieder ausgeführt wird.

Wieso speicherst du die Bilder nicht dauerhaft auf deinem Server ab?
Um Änderungen zu verfolgen, bildest du einfach den MD5-Hash des ZIP-Ordners und des Datenbankeintrags.
 
Wieso speicherst du die Bilder nicht dauerhaft auf deinem Server ab?
Um Änderungen zu verfolgen, bildest du einfach den MD5-Hash des ZIP-Ordners und des Datenbankeintrags.
Ich hatte zwar schon darüber nachgedacht, die Seite statisch aufzubauen, hatte das aber wieder verworfen, weil ich sicherstellen wollte, dass Änderungen an der Datenbank die Seite direkt aktualisieren.
Dabei habe ich aber nicht an die Lösung mit dem MD5-Hash gedacht. So gehts natürlich.

Vielen Dank!
 
Zurück