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

    Creare un file Zip in una determinata cartella

    Ho scaricato da internet questa classe per creare il file zip che mi serve....

    Codice 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;
            
    //$directoryName = str_replace($archivio.'/','',$directoryName);
            
    $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");
            
         }


    l'esempio per il suo utilizzo è questo...
    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);
    @
    unlink($fileName);
    ?>
    ...il mio problema ora è questo....la classe crea un file archive.zip nella stessa cartella in cui si trova il file PHP che richiama la classe....quindi se il mio file index.php che si trova nella root richiama la classe per creare il file compresso, questo mi crea il file archive.zip nella root....

    ....ora come faccio a dirgli che il file lo deve creare all'interno della cartella, ad esempio, "archivio"?????
    Qualcuno sa darmi una mano??? :master:

  2. #2
    Guarda la variabile $fileName del tuo esempio.

    Comunque una soluzione del genere crea problemi di memoria non appena lo ZIP inizia ad assumere grandi dimensioni.

  3. #3
    Originariamente inviato da filippo.toso
    Guarda la variabile $fileName del tuo esempio.

    Comunque una soluzione del genere crea problemi di memoria non appena lo ZIP inizia ad assumere grandi dimensioni.
    bhè, nn dovrei avere problemi perchè per la maggiorparte sono tutti file pdf, ma nel caso li avrò...cosa mi consigli di fare?
    Esiste un'altra soluzione per creare file zip di grandi dimensioni?

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.