Zipdatei on-the-fly erstellen (problem)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zipdatei on-the-fly erstellen (problem)

    Hi,
    ich habe in meiner Webpräsens mehrere Bildergalerien, die ich auf Wunsch in eine Zip-Datei packe und zum download anbieten will.
    Das zippen soll "on-the-fly" pssieren, damit das Archiv einerseits nicht unnötig Webspace verschlingt und andererseits ändern sich die Galerien von Zeit zu Zeit.

    Mein Co-Webmaster hat jetzt vor einer Woche ein Skript geschrieben, was genau das erledigen soll. Es benutzt eine Zip-Klasse, die die Dateien packen und als Download anbieten soll. Bei ihm klappt das ganze und er bekommt einen ordentlichen Dateidownload im Browser.
    Bei mir hingegen (und auch bei einer anderen Testperson) läd der Browser (was ich anhand des Netzwerkmonitors sehe) zimlich viele Byte und zeigt im Browserstatus "loading" oder "transfering" an. Nach einiger Zeit kommt dann auch der Downloaddialog in meinem Browser und ich kann festlegen, wo das Archiv gespeichert werden soll. Ich wähle darauf hin den Speicherort und sofort ist der Download beendet. Das Archiv hat dann bei mir die größe von 0 Byte.

    Da ich mich heute damit etwas befasst habe, um das Problem zu lösen, habe ich einfach mal eine andere Zip-Klasse genommen. Das Ergebnis ist leider das gleiche.
    Hatte jemand schon mal das gleiche Problem?
    Damit ihr mir besser helfen könnt, habe ich etwas Code rausgesucht von meinem gedöns.

    1. Im Dateianhang ist die Klasse, die ich verwende.
    2. Der Benutzer ruft eine Seite auf, die folgenden Code beinhaltet:
    PHP-Code:
    include('Homepage/Index-Skripte/bilder.php');

    $bilder = new bilder(0);
    $bilder->item 12;

    $bilder->make_zip_from_gallery(); 
    Dieser Code hier drüber ruft eine Funktion in der Klasse "Bilder" auf der so aussieht. Dieser Code verwendet die Zip-Klasse um das Archiv damit zu erzeugen.
    PHP-Code:
        function make_zip_from_gallery() 
        {
            global 
    $db;

            include(
    'Homepage/Index-Skripte/zip_lib.php');
            
    //
            //Errorreport aus sonst zermatscht es das .zip
            //    
            
    error_reporting(NIX); 
            
    //
            //Speicherlimit hochsetzen, sonst passt die Zipfile nicht in den Speicher
            //
            
    ini_set("memory_limit","100M");
            
    //
            // Einlesen der Daten zur Bildergalerie
            //
            
    $sql 'SELECT name FROM '.BILDERGALERIEN_TABLE.' WHERE galerie_id = '.$this->item;
            if (!
    $result $db->sql_query($sql)) 
            {
                
    message_die(GENERAL_ERROR,'Bildergalerie-Informationen konnten nicht geladen werden.','',__LINE__,__FILE__,$sql);
            }
            
    $galeriename_in_zip $db->sql_fetchrow($result);
            
    //
            // Galerienamen als Dateinamenprefix DOS-konform machen
            //
            
    $galeriename_in_zip strtolower(stripslashes($galeriename_in_zip['name']));
            
    $galeriename_in_zip str_replace('/'' '$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('\\'' '$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('|'' '$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('<'' '$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('>'' '$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace(':'' '$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('*'' '$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('?'' '$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('"'' '$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('ä''ae'$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('ü''ue'$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('ö''oe'$galeriename_in_zip); 
            
    $galeriename_in_zip str_replace('ß''ss'$galeriename_in_zip); 
               
    //
               // Einlesen aller Bilder zur Bildergalerie
               //
            
    $sql 'SELECT datei FROM '.BILDER_TABLE.' WHERE bild_id IN ('.implode(',',$this->get_images()).')';
            if (!
    $result $db->sql_query($sql)) 
            {
                
    message_die(GENERAL_ERROR,'Bilder konnten nicht geladen werden.','',__LINE__,__FILE__,$sql);
            }
              
    //
               // Neues Archiv initialisieren
            //
            
    $zipfile = new zipfile();   
            
    $subfix 0;
        
            while(
    $daten $db->sql_fetchrow($result))
            {
                   
    $subfix++;
                
    //
                // Alle Dateien in das Zip-Archiv packen.
                //
                
    if (!is_readable('Homepage/Bildergalerien/'.$daten['datei'])) 
                {
                    
    message_die(GENERAL_ERROR,'Fehler beim packen des Bildes '.$daten['datei'].' - Bild konnte nicht geladen werden.','',__LINE__,__FILE__,$sql);
                }
                
    $open fopen('Homepage/Bildergalerien/'.$daten['datei'],'rb');
                
    $file_data fread($open,filesize('Homepage/Bildergalerien/'.$daten['datei']));
                   
    fclose($open);
        
                
    $zipfile->addfile($file_data,'Bild_'.$subfix.strrchr($daten['datei'],'.'));
            }
            
    //
            // Das Archiv an den Browser senden
            //
            
    header("Content-type: application/zip");  
            
    header("Content-disposition: attachment; filename=".urlencode($galeriename_in_zip).".zip");
            print  
    $zipfile->file();
            exit;

    Ich hoffe mir kann jemand helfen, wieso das runtergeladene Archiv 0 Byte groß ist.
    Angehängte Dateien

  • #2
    Hi,

    das wird wohl am header liegen. Siehe:
    http://www.dclp-faq.de/q/q-datei-download.html
    Grüsse,
    Sebastian


    Profil Flex Freelancer
    Twitter twitter.com/flashhilfe
    Web Flash und Flex Community

    Kommentar


    • #3
      Anfangs war der Header vom Type "application/octet-stream" und ich habe ihn geändert auf "application/zip", weil es nicht lief,

      Ich habe es jetzt wieder auf "application/octet-stream" aber zeigt keine veränderungen

      Kommentar

      Lädt...
      X