narrenkappe: große datenmengen zippen

hallo,
kann ich mehrere 100mb mit php oder ähnlicher scriptsprache onthefly zippen????
ich hab nämlich eine große bildergalerie mit mehreren tausend bildern zu erstellen, wo jeder user seine bilder makieren und dann gezippt laden kann.
für hilfe wäre ich dankbar, da ich schon verschieden methoden ausprobiert habe.
lg

  1. Hello,

    ASP.NET kann zumindest, dort würde dir der .NET ZipLib kannst du den gezippten Output direkt an den Client senden ohne dazu eine temporäre Datei o.ä. zu benötigen.

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Inter Arma Enim Silent Leges  --  Cicero
  2. hallo

    bei neueren php-Versionen gibt es die Klasse "ZipArchive" allerdings kann die nicht von Haus aus ganze Ordner zippen.

    Desshalb habe ich da mal die Klasse erweitert:

      
    class superZipArchive extends ZipArchive {  
     public function open($filename, $flags = null){  
      $this->qgFilename = $filename;  
      return parent::open($filename, $flags);  
     }  
     public function addDir($dir, $localname = null, $regexpExclude = null){  
      if($localname === null){ $localname = basename($dir); }  
      
      $iter = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir ), true );  
      $i = 0;  
      foreach ( $iter as $file ){  
       if($regexpExclude AND preg_match($regexpExclude, $file)){ continue; }  
       if(++$i > 50){ // **  
        $i = 0;  
        $this->close();  
        $this->open( $this->qgFilename, ZipArchive::CREATE );  
       }  
       $path = $localname.substr($file,strlen($dir));  
       $this->addFile( $file, $path );  
      }  
     }  
    }  
    
    

    ** allerdings hat die Klasse Probleme mit vielen Dateien, desshalb baue ich einen Zähler ein um immer nach 50 Dateien das Zip zu schliessen und wieder neue zu eröffnen.

  3. Hi,

    kann ich mehrere 100mb mit php oder ähnlicher scriptsprache onthefly zippen????

    Mit meinem ZIP (funktioniert mindestens ab PHP 4.01) habe ich schon ganze Websites gepackt (mit viiieeeelen Dateien und weitaus mehr als 100  MB). Ist aber natürlich auch eine Frage, welche Berechtigung/Resourcen dir konkret zur Verfügung stehen!

    Ansonsten: Wenn serverunabhängige Funktionalität nicht wichtig ist, dann wäre der schnellste Weg sicher, ein ZIP-Programm des Servers direkt aufzurufen

    Gruß, Cybaer

    --
    Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
    (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
    1. Mit meinem ZIP (funktioniert mindestens ab PHP 4.01) habe ich schon ganze Websites gepackt (mit viiieeeelen Dateien und weitaus mehr als 100  MB). Ist aber natürlich auch eine Frage, welche Berechtigung/Resourcen dir konkret zur Verfügung stehen!

      Das Script funktioniert soweit ganz gut. Allerdings erstellt es zwei Dateien.
      Kann ich auch einzelne Dateien damit zippen, da ich nicht 6GB Fotos zippen möchte

      Ansonsten: Wenn serverunabhängige Funktionalität nicht wichtig ist, dann wäre der schnellste Weg sicher, ein ZIP-Programm des Servers direkt aufzurufen

      exec("zip ".$_SERVER['DOCUMENT_ROOT']."/zzz.zip ".$_SERVER['DOCUMENT_ROOT']."/index.html"));

      Mit obigem Beispiel hab ich es Versucht und da ich kein Resultat sehen konnte, nehme ich an, dass ich diese Version nicht anwenden kann.

      Gruß
      narrenkappe

      1. Hi,

        Das Script funktioniert soweit ganz gut. Allerdings erstellt es zwei Dateien.

        Wie meinst Du das? Welche "zwei" Dateien?

        Kann ich auch einzelne Dateien damit zippen, da ich nicht 6GB Fotos zippen möchte

        Ja. Du kannst als Quelle einen String mit einem Pfad übergeben, einen Leerstring (oder nichts) für den aktuellen Pfad, einen String mit einem Dateinamen, oder ein Array mit Dateinamen.

        Du kannst also nicht nur einzelne Dateien zippen, sondern auch eine beliebige Liste erstellen, und dann diese Dateien zippen.

        Gruß, Cybaer

        --
        Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
        (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
        1. Hi,

          Wie meinst Du das? Welche "zwei" Dateien?

          $newzip=$z->zip($_SERVER['DOCUMENT_ROOT'].'/index.html',"my.zip",FALSE,FALSE);

          Mit dieser Zeile hab ich es Versucht==> es gab eine html.zip und eine my.zip.
          in der html.zip war einfach das ganze Verzeichnis mit unterverzeichnissen drinne, in dem anderen noch eine index.html im "Wurzelverzeichnis". Zusätzlich dazu waren noch alle weiteren Dateien doppelt vertreten.
          lg und vielen Dannk für die Mühe
          narrenkappe

          1. Hi,

            Mit dieser Zeile hab ich es Versucht==> es gab eine html.zip und eine my.zip.

            Ich schau mir das mal an - habe aber mom. keine Zeit dafür (frühestens morgen - wahrscheinlich aber erst Anfang nächster Woche). Bis dahin kann ich dir nur den Tip gegen, es mal mit dem Nachfolger zu versuchen ...

            Gruß, Cybaer

            --
            Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
            (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)