Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 52
  1. #1
    Utente bannato
    Registrato dal
    Aug 2002
    Messaggi
    91
    Questa è la library scaricata da zend.com

    Codice PHP:
    <?php 

    /* 

    Zip file creation class 
    makes zip files on the fly... 

    use the functions add_dir() and add_file() to build the zip file; 
    see example code below 

    by Eric Mueller 
    [url]http://www.themepark.com[/url] 

    v1.1 9-20-01 
      - added comments to example 

    v1.0 2-5-01 

    initial version with: 
      - class appearance 
      - add_file() and file() methods 
      - gzcompress() output hacking 
    by Denis O.Philippov, [email]webmaster@atlant.ru[/email], [url]http://www.atlant.ru[/url] 

    */ 

    // official ZIP file format: [url]http://www.pkware.com/appnote.txt[/url] 

    class zipfile   
    {   

        var 
    $datasec = array(); // array to store compressed data 
        
    var $ctrl_dir = array(); // central directory    
        
    var $eof_ctrl_dir "\x50\x4b\x05\x06\x00\x00\x00\x00"//end of Central directory record 
        
    var $old_offset 0

        function 
    add_dir($name)    

        
    // adds "directory" to archive - do this before putting any files in directory! 
        // $name - name of directory... like this: "path/" 
        // ...then you can add files using add_file with names like "path/file.txt" 
        
    {   
            
    $name str_replace("\\""/"$name);   

            
    $fr "\x50\x4b\x03\x04"
            
    $fr .= "\x0a\x00";    // ver needed to extract 
            
    $fr .= "\x00\x00";    // gen purpose bit flag 
            
    $fr .= "\x00\x00";    // compression method 
            
    $fr .= "\x00\x00\x00\x00"// last mod time and date 

            
    $fr .= pack("V",0); // crc32 
            
    $fr .= pack("V",0); //compressed filesize 
            
    $fr .= pack("V",0); //uncompressed filesize 
            
    $fr .= pack("v"strlen($name) ); //length of pathname 
            
    $fr .= pack("v"); //extra field length 
            
    $fr .= $name;   
            
    // end of "local file header" segment 

            // no "file data" segment for path 

            // "data descriptor" segment (optional but necessary if archive is not served as file) 
            
    $fr .= pack("V",$crc); //crc32 
            
    $fr .= pack("V",$c_len); //compressed filesize 
            
    $fr .= pack("V",$unc_len); //uncompressed filesize 

            // add this entry to array 
            
    $this -> datasec[] = $fr

            
    $new_offset strlen(implode(""$this->datasec)); 

            
    // ext. file attributes mirrors MS-DOS directory attr byte, detailed 
            // at [url]http://support.microsoft.com/support/kb/articles/Q125/0/19.asp[/url] 

            // now add to central record 
            
    $cdrec "\x50\x4b\x01\x02"
            
    $cdrec .="\x00\x00";    // version made by 
            
    $cdrec .="\x0a\x00";    // version needed to extract 
            
    $cdrec .="\x00\x00";    // gen purpose bit flag 
            
    $cdrec .="\x00\x00";    // compression method 
            
    $cdrec .="\x00\x00\x00\x00"// last mod time & date 
            
    $cdrec .= pack("V",0); // crc32 
            
    $cdrec .= pack("V",0); //compressed filesize 
            
    $cdrec .= pack("V",0); //uncompressed filesize 
            
    $cdrec .= pack("v"strlen($name) ); //length of filename 
            
    $cdrec .= pack("v"); //extra field length    
            
    $cdrec .= pack("v"); //file comment length 
            
    $cdrec .= pack("v"); //disk number start 
            
    $cdrec .= pack("v"); //internal file attributes 
            
    $ext "\x00\x00\x10\x00"
            
    $ext "\xff\xff\xff\xff";   
            
    $cdrec .= pack("V"16 ); //external file attributes  - 'directory' bit set 

            
    $cdrec .= pack("V"$this -> old_offset ); //relative offset of local header 
            
    $this -> old_offset $new_offset

            
    $cdrec .= $name;   
            
    // optional extra field, file comment goes here 
            // save to array 
            
    $this -> ctrl_dir[] = $cdrec;   

              
        } 


        function 
    add_file($data$name)    

        
    // adds "file" to archive    
        // $data - file contents 
        // $name - name of file in archive. Add path if your want 

        
    {   
            
    $name str_replace("\\""/"$name);   
            
    //$name = str_replace("\\", "\\\\", $name); 

            
    $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 .= "\x00\x00\x00\x00"// last mod time and date 

            
    $unc_len strlen($data);   
            
    $crc crc32($data);   
            
    $zdata gzcompress($data);   
            
    $zdata substrsubstr($zdata0strlen($zdata) - 4), 2); // fix crc bug 
            
    $c_len strlen($zdata);   
            
    $fr .= pack("V",$crc); // crc32 
            
    $fr .= pack("V",$c_len); //compressed filesize 
            
    $fr .= pack("V",$unc_len); //uncompressed filesize 
            
    $fr .= pack("v"strlen($name) ); //length of filename 
            
    $fr .= pack("v"); //extra field length 
            
    $fr .= $name;   
            
    // end of "local file header" segment 
              
            // "file data" segment 
            
    $fr .= $zdata;   

            
    // "data descriptor" segment (optional but necessary if archive is not served as file) 
            
    $fr .= pack("V",$crc); //crc32 
            
    $fr .= pack("V",$c_len); //compressed filesize 
            
    $fr .= pack("V",$unc_len); //uncompressed filesize 

            // add this entry to array 
            
    $this -> datasec[] = $fr

            
    $new_offset strlen(implode(""$this->datasec)); 

            
    // 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 .="\x00\x00\x00\x00"// last mod time & date 
            
    $cdrec .= pack("V",$crc); // crc32 
            
    $cdrec .= pack("V",$c_len); //compressed filesize 
            
    $cdrec .= pack("V",$unc_len); //uncompressed filesize 
            
    $cdrec .= pack("v"strlen($name) ); //length of filename 
            
    $cdrec .= pack("v"); //extra field length    
            
    $cdrec .= pack("v"); //file comment length 
            
    $cdrec .= pack("v"); //disk number start 
            
    $cdrec .= pack("v"); //internal file attributes 
            
    $cdrec .= pack("V"32 ); //external file attributes - 'archive' bit set 

            
    $cdrec .= pack("V"$this -> old_offset ); //relative offset of local header 
    //        echo "old offset is ".$this->old_offset.", new offset is $new_offset
    "; 
            
    $this -> old_offset = $new_offset

            
    $cdrec .= $name;   
            // optional extra field, file comment goes here 
            // save to central directory 
            
    $this -> ctrl_dir[] = $cdrec;   
        } 

        function file() { // dump out file    
            
    $data = implode("", $this -> datasec);   
            
    $ctrldir = implode("", $this -> ctrl_dir);   

            return    
                
    $data.   
                
    $ctrldir.   
                
    $this -> eof_ctrl_dir.   
                pack("
    v", sizeof($this -> ctrl_dir)).     // total # of entries "on this disk
                pack("
    v", sizeof($this -> ctrl_dir)).     // total # of entries overall 
                pack("
    V", strlen($ctrldir)).             // size of central dir 
                pack("
    V", strlen($data)).                 // offset to start of central dir 
                "
    \x00\x00";                             // .zip file comment length 
        } 
    }   

    ?>
    Per comodità,salvatela in un file esterno (In seguito la dovrete richiamare con include)..

    Adesso create un'altro file,con il seguente codice

    Codice PHP:
    <?php 
    include ("nome_della_libreria.php");
    $zipfile = new zipfile();   

    $zipfile -> add_dir("dir/"); 

    $filedata "(read your file into $filedata)";   
    $zipfile -> add_file($filedata"dir/file.txt");   

    $filename "output.zip"
    $fd fopen ($filename"wb"); 
    $out fwrite ($fd$zipfile -> file()); 
    fclose ($fd); 

    echo 
    "<a href=\"output.zip\">Click here to download the new zip file.</a>";

    ?>
    Allora analizziamo il tutto

    Includete la libreria precedentemente creata,in tal modo che il file che crea gli zip ne possa usufruire
    Codice PHP:
    include ("nome_della_libreria.php"); 
    Aggiunge una subdirectory al file zip che conterrà i file che verranno creati in seguito..

    Codice PHP:
    $zipfile -> add_dir("dir/"); 
    All'interno di filedata và inserito il contenuto del file che verrà creato in seguito
    Codice PHP:
    $filedata "(read your file into $filedata)"

    Inserite il nome del file da creare,con la relativa directory (ricordate che la directory deve essere uguale ad una di quelle create in precedenza all'interno del file zip
    Codice PHP:
    $zipfile -> add_file($filedata"dir/file.txt"); 


    Inserite in filename il nome del file zip che verrà creato
    Codice PHP:
    $filename "output.zip"
    $fd fopen ($filename"wb"); 
    $out fwrite ($fd$zipfile -> file()); 
    fclose ($fd); 
    Per finire inserite in href il nome del file zip che l'utente dovrà scaricare
    Codice PHP:
    echo "<a href=\"output.zip\">Click here to download the new zip file.</a>"
    Fine

  2. #2
    Ho controllato i credits e la libreria di phpmyadmin deriva proprio da quella descritta su Zend appena riportata da Dido
    per favore NIENTE PVT TECNICI da sconosciuti

  3. #3
    Utente bannato
    Registrato dal
    Aug 2002
    Messaggi
    91
    Originariamente inviato da Fabio Heller
    Ho controllato i credits e la libreria di phpmyadmin deriva proprio da quella descritta su Zend appena riportata da Dido
    Già infatti ieri ho usato lo stesso codice con la libreria di phpmyadmin,dopo aver apportato qualche modifica per il corretto adattamento a quella libreria (stranamente mi dava qualche piccolo errore,poi risolto in seguito)


    Bye Bye

  4. #4
    uffi uffi...

    ho seguito le vostre indicazioni am non riesco a zippare il file...

    in filedata va inserito quello che leggiamo dal file che desideriamo zippare, giusto? èper intenderci faccio un fread del contenuto del file da zippare?


    Io ho fatto così, mi crea lo zip, lo scarico ma quando tento di aprirlo mi esce l'errore che il file non è un archivio valido, se l'ho scaricto da internetr di riprovarci...


    come mai? avete ideee?!?

  5. #5
    teuccio a me così va (naturalmente $file1 e $file2 sono due file comprensivi di percorso)
    codice:
              $files = array($file1, $file2);
              $zipfile = new zipfile();
              foreach($files as $file) {
                      $fp = fopen($file, "rb");
                      $buffer = fread($fp, filesize($file));
                      fclose($fp);
                      $zipfile->addFile($buffer, basename($file));
              }
              $fp = fopen("archivio.zip", "wb");
              fwrite($fp, $zipfile->file());
              fclose($fp);
    E' la mia opinione ed io la condivido
    Non condivido la tua idea ma darei la vita perché tu la possa esprimere (Voltaire)
    Scrivi sul muro

  6. #6
    Utente bannato
    Registrato dal
    Aug 2001
    Messaggi
    696
    Ho copiato la discussione per ripulirla e farne una pillola la discussione originale (per dovere di cronaca) è questa
    http://forum.html.it/forum/showthrea...hreadid=380139



    P.S. x dido: Se vuoi fare delle aggiunte al primo messaggio per migliorarle basta fare un fischio.

  7. #7
    Ho lo stesso problema di teuccio, creo il file zip, che sembra anche avere dimensioni realiztiche in base al contenuto, ma se tento di aprirlo mi da il suo stesso errore.
    http://www.beavermag.it

  8. #8
    La procedura sembra facile, e sembra pure funzionare ma il file zip mi risulta corrotto...potrebbe essere dovuto al fatto che php gira sul server sotto linux e io cerco di aprire lo zip da windows?
    E' l'unica cosa che mi viene in mente.
    Se fosse così esiste qualche alternativa?
    http://www.beavermag.it

  9. #9
    Originariamente inviato da biamat
    La procedura sembra facile, e sembra pure funzionare ma il file zip mi risulta corrotto...potrebbe essere dovuto al fatto che php gira sul server sotto linux e io cerco di aprire lo zip da windows?
    E' l'unica cosa che mi viene in mente.
    Se fosse così esiste qualche alternativa?
    stesso problema, file creato con successo, package realistico, a confronto con un gz, risultato pessimo, file zip corrotto...

    In comnpenso ho 3 bei notice
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    Un consiglio ???

    buttate via quel file e passate a questo, mi ha sbalordito!
    http://www.phpclasses.org/browse.html/package/945.html

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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 © 2024 vBulletin Solutions, Inc. All rights reserved.