Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    generare file zip "al volo"

    ho creato uno script che genere dei files zip tramite la classe pclzip, contenenti foto che poi il cliente può scaricare, la questione è che una volte che il cliente ha finito di scaricare il file questo mi rimane sul server.

    è possibile in qualche maniera ovviare al problema, cioè fare creare il file all'atto dello scaricamento o cose del genere.

    qualcuno ha una idea?

  2. #2
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    io uso la classe createzipfile:
    Codice PHP:
    <?php

    /**
     * Class to dynamically create a zip file (archive)
     *
     * @author Rochak Chauhan
     */

    class createZip  {  

        public 
    $compressedData = array(); 
        public 
    $centralDirectory = array(); // central directory   
        
    public $endOfCentralDirectory "\x50\x4b\x05\x06\x00\x00\x00\x00"//end of Central directory record
        
    public $oldOffset 0;

        
    /**
         * Function to create the directory where the file(s) will be unzipped
         *
         * @param $directoryName string 
         *
         */
        
        
    public function addDirectory($directoryName) {
            
    $directoryName str_replace("\\""/"$directoryName);  

            
    $feedArrayRow "\x50\x4b\x03\x04";
            
    $feedArrayRow .= "\x0a\x00";    
            
    $feedArrayRow .= "\x00\x00";    
            
    $feedArrayRow .= "\x00\x00";    
            
    $feedArrayRow .= "\x00\x00\x00\x00"

            
    $feedArrayRow .= pack("V",0); 
            
    $feedArrayRow .= pack("V",0); 
            
    $feedArrayRow .= pack("V",0); 
            
    $feedArrayRow .= pack("v"strlen($directoryName) ); 
            
    $feedArrayRow .= pack("v"); 
            
    $feedArrayRow .= $directoryName;  

            
    $feedArrayRow .= pack("V",0); 
            
    $feedArrayRow .= pack("V",0); 
            
    $feedArrayRow .= pack("V",0); 

            
    $this -> compressedData[] = $feedArrayRow;
            
            
    $newOffset strlen(implode(""$this->compressedData));

            
    $addCentralRecord "\x50\x4b\x01\x02";
            
    $addCentralRecord .="\x00\x00";    
            
    $addCentralRecord .="\x0a\x00";    
            
    $addCentralRecord .="\x00\x00";    
            
    $addCentralRecord .="\x00\x00";    
            
    $addCentralRecord .="\x00\x00\x00\x00"
            
    $addCentralRecord .= pack("V",0); 
            
    $addCentralRecord .= pack("V",0); 
            
    $addCentralRecord .= pack("V",0); 
            
    $addCentralRecord .= pack("v"strlen($directoryName) ); 
            
    $addCentralRecord .= pack("v"); 
            
    $addCentralRecord .= pack("v"); 
            
    $addCentralRecord .= pack("v"); 
            
    $addCentralRecord .= pack("v"); 
            
    $ext "\x00\x00\x10\x00";
            
    $ext "\xff\xff\xff\xff";  
            
    $addCentralRecord .= pack("V"16 ); 

            
    $addCentralRecord .= pack("V"$this -> oldOffset ); 
            
    $this -> oldOffset $newOffset;

            
    $addCentralRecord .= $directoryName;  

            
    $this -> centralDirectory[] = $addCentralRecord;  
        }     
        
        
    /**
         * Function to add file(s) to the specified directory in the archive 
         *
         * @param $directoryName string 
         *
         */
        
        
    public function addFile($data$directoryName)   {
     
            
    $directoryName str_replace("\\""/"$directoryName);  
        
            
    $feedArrayRow "\x50\x4b\x03\x04";
            
    $feedArrayRow .= "\x14\x00";    
            
    $feedArrayRow .= "\x00\x00";    
            
    $feedArrayRow .= "\x08\x00";    
            
    $feedArrayRow .= "\x00\x00\x00\x00"

            
    $uncompressedLength strlen($data);  
            
    $compression crc32($data);  
            
    $gzCompressedData gzcompress($data);  
            
    $gzCompressedData substrsubstr($gzCompressedData0strlen($gzCompressedData) - 4), 2); 
            
    $compressedLength strlen($gzCompressedData);  
            
    $feedArrayRow .= pack("V",$compression); 
            
    $feedArrayRow .= pack("V",$compressedLength); 
            
    $feedArrayRow .= pack("V",$uncompressedLength); 
            
    $feedArrayRow .= pack("v"strlen($directoryName) ); 
            
    $feedArrayRow .= pack("v"); 
            
    $feedArrayRow .= $directoryName;  

            
    $feedArrayRow .= $gzCompressedData;  

            
    $feedArrayRow .= pack("V",$compression); 
            
    $feedArrayRow .= pack("V",$compressedLength); 
            
    $feedArrayRow .= pack("V",$uncompressedLength); 

            
    $this -> compressedData[] = $feedArrayRow;

            
    $newOffset strlen(implode(""$this->compressedData));

            
    $addCentralRecord "\x50\x4b\x01\x02";
            
    $addCentralRecord .="\x00\x00";    
            
    $addCentralRecord .="\x14\x00";    
            
    $addCentralRecord .="\x00\x00";    
            
    $addCentralRecord .="\x08\x00";    
            
    $addCentralRecord .="\x00\x00\x00\x00"
            
    $addCentralRecord .= pack("V",$compression); 
            
    $addCentralRecord .= pack("V",$compressedLength); 
            
    $addCentralRecord .= pack("V",$uncompressedLength); 
            
    $addCentralRecord .= pack("v"strlen($directoryName) ); 
            
    $addCentralRecord .= pack("v");
            
    $addCentralRecord .= pack("v");
            
    $addCentralRecord .= pack("v");
            
    $addCentralRecord .= pack("v");
            
    $addCentralRecord .= pack("V"32 ); 

            
    $addCentralRecord .= pack("V"$this -> oldOffset ); 
            
    $this -> oldOffset $newOffset;

            
    $addCentralRecord .= $directoryName;  

            
    $this -> centralDirectory[] = $addCentralRecord;  
        }

        
    /**
         * Fucntion to return the zip file
         *
         * @return zipfile (archive)
         */

        
    public function getZippedfile() { 

            
    $data implode(""$this -> compressedData);  
            
    $controlDirectory implode(""$this -> centralDirectory);  

            return   
                
    $data.  
                
    $controlDirectory.  
                
    $this -> endOfCentralDirectory.  
                
    pack("v"sizeof($this -> centralDirectory)).     
                
    pack("v"sizeof($this -> centralDirectory)).     
                
    pack("V"strlen($controlDirectory)).             
                
    pack("V"strlen($data)).                
                
    "\x00\x00";                             
        }

        
    /**
         *
         * Function to force the download of the archive as soon as it is created
         *
         * @param archiveName string - name of the created archive file
         */

        
    public function forceDownload($archiveName) {
            
    $headerInfo '';
             
            if(
    ini_get('zlib.output_compression')) {
                
    ini_set('zlib.output_compression''Off');
            }

            
    // Security checks
            
    if( $archiveName == "" ) {
                echo 
    "<html><title>Public Photo Directory - Download </title><body>
    [B]ERROR:[/B] The download file was NOT SPECIFIED.</body></html>"
    ;
                exit;
            } 
            elseif ( ! 
    file_exists$archiveName ) ) {
                echo 
    "<html><title>Public Photo Directory - Download </title><body>
    [B]ERROR:[/B] File not found.</body></html>"
    ;
                exit;
            }

            
    header("Pragma: public");
            
    header("Expires: 0");
            
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
            
    header("Cache-Control: private",false);
            
    header("Content-Type: application/zip");
            
    header("Content-Disposition: attachment; filename=".basename($archiveName).";" );
            
    header("Content-Transfer-Encoding: binary");
            
    header("Content-Length: ".filesize($archiveName));
            
    readfile("$archiveName");
            
         }

    }
    poi istanzio la classe:
    Codice PHP:
    <?php

    include_once("createZip.inc.php");
    $createZip = new createZip;  

    $createZip -> addDirectory("dir/");

    $fileContents file_get_contents("img.jpg");  
    $createZip -> addFile($fileContents"dir/img.jpg");  


    $fileName "archive.zip";
    $fd fopen ($fileName"wb");
    $out fwrite ($fd$createZip -> getZippedfile());
    fclose ($fd);

    $createZip -> forceDownload($fileName);//forza il download del file
    @unlink($fileName);//elimino il file

  3. #3
    sinceramente non ho mai utilizzato questa classe, però penso una cosa, potresti far andare il cliente ad una determinata pagina... quella pagina crea al volo lo zip (allo stesso modo come lo hai creato in precedenza) e permette al cliente di scaricarlo, poi potresti OBBLIGARE il cliente a cliccare un tasto (una sorta di logout). In questo modo sapresti quando l'utente ha terminato lo scaricamento e, usando il comando unlink, potresti cancellare il file...





    edit: mariox mi ha preceduto, dandoti una soluzione migliore!!

  4. #4
    Originariamente inviato da mariox
    io uso la classe createzipfile:
    Codice PHP:
    <?php

    /**
     * Class to dynamically create a zip file (archive)
     *
     * @author Rochak Chauhan
     */

    class createZip  {  

        public 
    $compressedData = array(); 
        public 
    $centralDirectory = array(); // central directory   
        
    public $endOfCentralDirectory "\x50\x4b\x05\x06\x00\x00\x00\x00"//end of Central directory record
        
    public $oldOffset 0;

        
    /**
         * Function to create the directory where the file(s) will be unzipped
         *
         * @param $directoryName string 
         *
         */
        
        
    public function addDirectory($directoryName) {
    ma quindi aspetta lo scaricamento del file e poi lo cancella? non è che appena parte il download lo cancella?

  5. #5
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    aspetta lo scaricamento del file e poi lo cancella.

  6. #6
    Utente di HTML.it L'avatar di alpeweb
    Registrato dal
    Oct 2002
    Messaggi
    1,691
    puoi anche vedere gli ob
    ...altri 5 anni di purga...

  7. #7
    grazie mille

  8. #8
    potreste riincollare la classe che così come hai messo manca qualche parentesi...

  9. #9
    l'ho scaricata da phpclasses ma ho sempre sto errore

    Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\programmi\easyphp1-8\www\anteprima_zip\createzip.inc.php on line 11

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.