Turtle: Hochladen einer zip-Datei und entpacken auf dem Server

Hallo,

folgendes Problem:

Es soll eine zip-datei hochgeladen werden, die mehrere jpg-dateien enthält.
Entpacken dieser zip-Datei enthält nur jpg-Dateien und keine Ordner etc.

Nun soll nach dem Hochladen die zip-datei auf dem Server entpackt und weiter verarbeitet werden.

Dazu mein bisheriges Script:

//UNZIP
$output = shell_exec("unzip -p ".$_FILES[$destination]['tmp_name']);

$testFile = "testTest/test.jpg";
$testFileOpen = fopen($testFile, "w");
fwrite($testFileOpen, $output);
fclose($testFileOpen);
//

Ich öffne die zip-Datei und speicher sie ab.
Meine Testdatei enthält zwei JPGs.
Testweise speicher ich das Entzippte unter testTest/test.jpg ab.
Öffnen von test.jpg zeigt mir eines der Bilder an.
Da das zip aber zwei Bilder enthält möchte ich nun wissen, wie ich auf das zweite Bild zugreifen kann,
bzw. wie ich auf alle Bilder zugreifen kann, wenn die zip-Datei n Bilder4 enthält.

Vielen Dank für jede Hilfe,
Turtle

  1. Hi,

    Dazu mein bisheriges Script:

    //UNZIP
    $output = shell_exec("unzip -p ".$_FILES[$destination]['tmp_name']);

    //

    Ich öffne die zip-Datei und speicher sie ab.
    Meine Testdatei enthält zwei JPGs.
    Testweise speicher ich das Entzippte unter testTest/test.jpg ab.
    Öffnen von test.jpg zeigt mir eines der Bilder an.
    Da das zip aber zwei Bilder enthält möchte ich nun wissen, wie ich auf das zweite Bild zugreifen kann,
    bzw. wie ich auf alle Bilder zugreifen kann, wenn die zip-Datei n Bilder4 enthält.

    http://de.php.net/shell_exec

    In $output hast Du also nun den gesammten Inhalt des Zips. Ein langer String. Den mußt Du auseinanderklamüsern. Da es sich um JPEGs handelt ist hier der Anfang mit den beiden Bytes 0xffd8, ab Byte 6 gibt es noch die Möglichkeiten "JFIF" bzw "Exif" (Groß/Kleinschreibung ist genau so, ohne die Anführungstriche). Also geht schlichtes Splitten.

    Vorraussichtlich zu erwartenden Probleme:
    Die Größe von $output übersteigt die zulässige Grenze (meist 8 MiB).
    Die Programmierung des Splits ist nicht ganz so einfach.

    Bessere Lösung: temporär auf die Platte auspacken und nach Gebrauch wieder löschen.

    Beste Lösung:
    http://de.php.net/manual/en/function.zip-open.php

    so short

    Christopph Zurnieden

    1. Hi,

      meine Lösung:

      Anstatt
      $output = shell_exec("unzip -p ".$_FILES[$destination]['tmp_name']);

      mache ich es so:
      $output = shell_exec("unzip -d tempZips ".$_FILES[$destination]['tmp_name']);

      Das schreibt mir die entzippten Dateien in den Ordner tempZips.
      Dann brauche ich nur die in tempZips enthaltenen Dateien zur Weiterverarbeitung auszulesen.

      Gruss,
      Turtle