Ergebnis 1 bis 2 von 2

Thema: Abfragen wann .zip fertiggestellt wurde

  1. #1
    Marcw
    Gast

    Standard Abfragen wann .zip fertiggestellt wurde

    Hallo alle miteinander

    Ich habe nun seit vorgestern verzweifelt versucht eine Lösung für folgendes Problem zu finden :

    Ich erstelle on-the-fly eine zip- Datei. Funktioniert auch einwandfrei.
    Nun soll aber - sobald die zip-Datei fertiggestellt ist - der Download starten. Dies funktioniert in soweit auch, als dass der Download startet. Nur startet er zu früh, d.h. die zip-Datei ist noch nicht fertig.

    Nun meine Frage:

    Kann man abfragen, ob eine Datei vorhanden ist bzw. fertiggestellt wurde und dann erst mit dem Download beginnen ?

    Schon einmal vielen Dank für eure Hilfe !

    //////////////////////////////ZIP-FUNKTIONEN////////////////////
    Code:
    <?php
    /* $Id&#58; zip.lib.php,v 1.1 2004/02/14 15&#58;21&#58;18 anoncvs_tusedb Exp $ */
    // vim&#58; expandtab sw=4 ts=4 sts=4&#58;
    
    
    class zipfile
    &#123;
        /**
         * Array to store compressed data
         *
         * @var  array    $datasec
         */
        var $datasec      = array&#40;&#41;;
    
        /**
         * Central directory
         *
         * @var  array    $ctrl_dir
         */
        var $ctrl_dir     = array&#40;&#41;;
    
        /**
         * End of central directory record
         *
         * @var  string   $eof_ctrl_dir
         */
        var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
    
        /**
         * Last offset position
         *
         * @var  integer  $old_offset
         */
        var $old_offset   = 0;
    
    
        /**
         * Converts an Unix timestamp to a four byte DOS date and time format &#40;date
         * in high two bytes, time in low two bytes allowing magnitude comparison&#41;.
         *
         * @param  integer  the current Unix timestamp
         *
         * @return integer  the current date in a four byte DOS format
         *
         * @access private
         */
        function unix2DosTime&#40;$unixtime = 0&#41; &#123;
            $timearray = &#40;$unixtime == 0&#41; ? getdate&#40;&#41; &#58; getdate&#40;$unixtime&#41;;
    
            if &#40;$timearray&#91;'year'&#93; < 1980&#41; &#123;
            	$timearray&#91;'year'&#93;    = 1980;
            	$timearray&#91;'mon'&#93;     = 1;
            	$timearray&#91;'mday'&#93;    = 1;
            	$timearray&#91;'hours'&#93;   = 0;
            	$timearray&#91;'minutes'&#93; = 0;
            	$timearray&#91;'seconds'&#93; = 0;
            &#125; // end if
    
            return &#40;&#40;$timearray&#91;'year'&#93; - 1980&#41; << 25&#41; | &#40;$timearray&#91;'mon'&#93; << 21&#41; | &#40;$timearray&#91;'mday'&#93; << 16&#41; |
                    &#40;$timearray&#91;'hours'&#93; << 11&#41; | &#40;$timearray&#91;'minutes'&#93; << 5&#41; | &#40;$timearray&#91;'seconds'&#93; >> 1&#41;;
        &#125; // end of the 'unix2DosTime&#40;&#41;' method
    
    
        /**
         * Adds "file" to archive
         *
         * @param  string   file contents
         * @param  string   name of the file in the archive &#40;may contains the path&#41;
         * @param  integer  the current timestamp
         *
         * @access public
         */
        function addFile&#40;$data, $name, $time = 0&#41;
        &#123;
    	echo $name."----";
            $name     = str_replace&#40;'../', '', $name&#41;;
    echo $name;
            $dtime    = dechex&#40;$this->unix2DosTime&#40;$time&#41;&#41;;
            $hexdtime = '\x' . $dtime&#91;6&#93; . $dtime&#91;7&#93;
                      . '\x' . $dtime&#91;4&#93; . $dtime&#91;5&#93;
                      . '\x' . $dtime&#91;2&#93; . $dtime&#91;3&#93;
                      . '\x' . $dtime&#91;0&#93; . $dtime&#91;1&#93;;
            eval&#40;'$hexdtime = "' . $hexdtime . '";'&#41;;
    
            $fr   = "\x50\x4b\x03\x04";
            $fr   .= "\x14\x00";            // ver needed to extract
            $fr   .= "\x00\x00";            // gen purpose bit flag
            $fr   .= "\x08\x00";            // compression method
            $fr   .= $hexdtime;             // last mod time and date
    
            // "local file header" segment
            $unc_len = strlen&#40;$data&#41;;
            $crc     = crc32&#40;$data&#41;;
            $zdata   = gzcompress&#40;$data&#41;;
            $zdata   = substr&#40;substr&#40;$zdata, 0, strlen&#40;$zdata&#41; - 4&#41;, 2&#41;; // fix crc bug
            $c_len   = strlen&#40;$zdata&#41;;
            $fr      .= pack&#40;'V', $crc&#41;;             // crc32
            $fr      .= pack&#40;'V', $c_len&#41;;           // compressed filesize
            $fr      .= pack&#40;'V', $unc_len&#41;;         // uncompressed filesize
            $fr      .= pack&#40;'v', strlen&#40;$name&#41;&#41;;    // length of filename
            $fr      .= pack&#40;'v', 0&#41;;                // extra field length
            $fr      .= $name;
    
            // "file data" segment
            $fr .= $zdata;
    
            // "data descriptor" segment &#40;optional but necessary if archive is not
            // served as file&#41;
            $fr .= pack&#40;'V', $crc&#41;;                 // crc32
            $fr .= pack&#40;'V', $c_len&#41;;               // compressed filesize
            $fr .= pack&#40;'V', $unc_len&#41;;             // uncompressed filesize
    
            // add this entry to array
            $this -> datasec&#91;&#93; = $fr;
    
            // now add to central directory record
            $cdrec = "\x50\x4b\x01\x02";
            $cdrec .= "\x00\x00";                // version made by
            $cdrec .= "\x14\x00";                // version needed to extract
            $cdrec .= "\x00\x00";                // gen purpose bit flag
            $cdrec .= "\x08\x00";                // compression method
            $cdrec .= $hexdtime;                 // last mod time & date
            $cdrec .= pack&#40;'V', $crc&#41;;           // crc32
            $cdrec .= pack&#40;'V', $c_len&#41;;         // compressed filesize
            $cdrec .= pack&#40;'V', $unc_len&#41;;       // uncompressed filesize
            $cdrec .= pack&#40;'v', strlen&#40;$name&#41; &#41;; // length of filename
            $cdrec .= pack&#40;'v', 0 &#41;;             // extra field length
            $cdrec .= pack&#40;'v', 0 &#41;;             // file comment length
            $cdrec .= pack&#40;'v', 0 &#41;;             // disk number start
            $cdrec .= pack&#40;'v', 0 &#41;;             // internal file attributes
            $cdrec .= pack&#40;'V', 32 &#41;;            // external file attributes - 'archive' bit set
    
            $cdrec .= pack&#40;'V', $this -> old_offset &#41;; // relative offset of local header
            $this -> old_offset += strlen&#40;$fr&#41;;
    
            $cdrec .= $name;
    
            // optional extra field, file comment goes here
            // save to central directory
            $this -> ctrl_dir&#91;&#93; = $cdrec;
        &#125; // end of the 'addFile&#40;&#41;' method
    
    
        /**
         * Dumps out file
         *
         * @return  string  the zipped file
         *
         * @access public
         */
        function file&#40;&#41;
        &#123;
            $data    = implode&#40;'', $this -> datasec&#41;;
            $ctrldir = implode&#40;'', $this -> ctrl_dir&#41;;
    
            return
                $data .
                $ctrldir .
                $this -> eof_ctrl_dir .
                pack&#40;'v', sizeof&#40;$this -> ctrl_dir&#41;&#41; .  // total # of entries "on this disk"
                pack&#40;'v', sizeof&#40;$this -> ctrl_dir&#41;&#41; .  // total # of entries overall
                pack&#40;'V', strlen&#40;$ctrldir&#41;&#41; .           // size of central dir
                pack&#40;'V', strlen&#40;$data&#41;&#41; .              // offset to start of central dir
                "\x00\x00";                             // .zip file comment length
        &#125; // end of the 'file&#40;&#41;' method
        
    
    
        function addFiles&#40;$files /*Only Pass Array*/&#41;
        &#123;
            foreach&#40;$files as $file&#41;
            &#123;
    		if &#40;is_file&#40;$file&#41;&#41; //directory check
    		&#123;
    			$data = implode&#40;"",file&#40;$file&#41;&#41;;
    	                $this->addFile&#40;$data,$file&#41;;
                    &#125;
            &#125;
        &#125;
        
    
    
        function output&#40;$file&#41;
        &#123;
            $fp=fopen&#40;$file,"w"&#41;;
            fwrite&#40;$fp,$this->file&#40;&#41;&#41;;
            fclose&#40;$fp&#41;;
    		
        &#125;
    
        
    
    &#125; // end of the 'zipfile' class
    
    ?>

    ///////////////////////ZIP-erzeugen/////////////////////////////

    Code:
    include&#40;"zip.lib.php"&#41;;
    $ziper = new zipfile&#40;&#41;;
    $ziper->addFiles&#40;array&#40;"read_me.txt","../".$bildname&#41;&#41;;
    $ziper->output&#40;$zipname&#41;;
    /////////////////////Download erzwingen//////////////////////

    Code:
    /* Variablen vorbesetzen */ 
    $id         =  $zipname;
    
    /* Ist ein Parameter übergeben worden */ 
    if &#40;strlen&#40;$id&#41; > 0&#41; 
    &#123; 
        /* Überprüfen ob Datei auf dem Server liegt */ 
        if &#40;is_file&#40;$id&#41; && substr&#40;$id,0,2&#41; != ".."  && substr&#40;$id,0,1&#41; != "/"&#41; 
        &#123; 
            /* Dateityp bestimmen */ 
            $file_extension = strtolower&#40; substr&#40; strrchr&#40; $id, "." &#41;, 1 &#41; &#41;; 
    
            /* Content-Type bestimmen */ 
            switch&#40; $file_extension &#41; &#123; 
                case "pdf"&#58; $ctype="application/pdf"; break; 
                  case "exe"&#58; $ctype="application/octet-stream"; break; 
                  case "zip"&#58; $ctype="application/zip"; break; 
                  case "doc"&#58; $ctype="application/msword"; break; 
                  case "xls"&#58; $ctype="application/vnd.ms-excel"; break; 
                  case "ppt"&#58; $ctype="application/vnd.ms-powerpoint"; break; 
                  case "gif"&#58; $ctype="image/gif"; break; 
                  case "png"&#58; $ctype="image/png"; break; 
                  case "jpeg"&#58; 
                  case "jpg"&#58; $ctype="image/jpg"; break; 
                  default&#58; $ctype="application/force-download"; 
            &#125; 
    
            /* Header setzen */ 
             
            /* Cache Kontrolle */ 
            header&#40; "Pragma&#58; public" &#41;; // required 
            header&#40; "Expires&#58; 0" &#41;; 
            header&#40; "Cache-Control&#58; must-revalidate, post-check=0, pre-check=0" &#41;; 
            header&#40; "Cache-Control&#58; private", false &#41;; // required for certain browsers 
             
            /* Angaben zur Datei 
                - basename&#40;&#41; liefert den Dateinamen aus einer URL 
                - filesize&#40;&#41; liefert fuer "lokale" Dateien deren Groesse. 
                  Remote-Dateien werden hierbei nicht unterstuetzt. */ 
            header&#40; "Content-Type&#58; $ctype" &#41;; 
            header&#40; "Content-Disposition&#58; attachment; filename=" . basename&#40; $id &#41; . ";" &#41;; 
            header&#40; "Content-Transfer-Encoding&#58; binary" &#41;; 
            header&#40; "Content-Length&#58; " . filesize&#40; $id &#41; &#41;; 
             
            /* Datei einlesen und in den Ausgabepuffer schreiben */ 
            readfile&#40; $id &#41;; 
            exit&#40;&#41;; 
    
        &#125; 
        else 
        &#123; 
            die&#40;"Datei wurde nicht gefunden.
    ".$id&#41;; 
        &#125; 
    &#125; 
    else 
    &#123; 
        die&#40;"Keine Datei ausgewählt."&#41;; 
    &#125;
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Kaiser(in)
    Registriert seit
    09.12.2005
    Alter
    29
    Beiträge
    2.496
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    hmm also mit php kannst du nich in einer datei überprüfen, wann wiese erstellt wurde, musst du schaun, ob da javascript herhalten kann oder du lässt mit sleep() ein paar sekunden warten
    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

Ähnliche Themen

  1. Ab wann sind Threads alt?
    Von Allegra im Forum Forum-Hilfe.de intern
    Antworten: 6
    Letzter Beitrag: 03.08.2008, 16:30
  2. wann kommt das paket..
    Von wartender im Forum Off Topic und Quasselbox
    Antworten: 3
    Letzter Beitrag: 09.07.2007, 13:15
  3. Seit wann ???
    Von °dieWoelfin° im Forum Forum-Hilfe.de intern
    Antworten: 11
    Letzter Beitrag: 20.11.2006, 15:39
  4. Wann bei Ebay verkaufen?
    Von gonzo224 im Forum Off Topic und Quasselbox
    Antworten: 6
    Letzter Beitrag: 22.01.2006, 20:40

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •