vi riporto qui di seguito il codice della mia classe Backup:
Codice PHP:
class Backup {
    var 
$arrayFile;
    var 
$fileZip;
    
    function 
Backup() {
        require_once 
"include_zipfile.php";
        
$this->arrayFile = array();
        
$i=0;
        if (
$handle opendir("../file_pdf")) {
            echo 
"<p style=\"border:1px solid #ccc;\">[b]Elenco dei file nella cartella &quot;file_pdf&quot;:[/b]
"
;
            while (
false !== ($file readdir($handle)) ) {
                if (
$file != "." && $file != ".." && $file != ".DS_Store") {
                    echo 
"[i]".($i+1).":[/i] ".$file."
"
;
                    
$this->arrayFile[$i] = $file;
                    
$i++;
                }
            }
            echo 
"</p>";
            
closedir($handle);
        }
    }
    function 
getCount() { return count($this->arrayFile); }
    function 
backupFiles() {
        
$zipfile = new zipfile();
        
$zipfile->add_dir("../file_pdf/");
        
$dataOra = new DataOraSQL(getdate());
        
$dataOraSQL substr(str_replace(":""-"str_replace(" ""_"$dataOra->codificaDataOra())),0,count($dataOra->codificaDataOra())-4);
        foreach (
$this->arrayFile as $file) {
            
$fileCompleto "../file_pdf/".$file;
            
$outCompleto "../backup/".$dataOraSQL.".zip";
            if (!
file_exists ($fileCompleto) || !is_readable ($fileCompleto))
                return 
false;
            if ((!
file_exists ($outCompleto) && !is_writeable (dirname ($outCompleto)) || (file_exists($outCompleto) && !is_writable($outCompleto)) ))
                return 
false;
            
$handleFile fopen($fileCompleto"rb");
            
$filedata fread($handleFilefilesize($fileCompleto));
//            $filedata = fopen($fileCompleto, "rb");
            
$zipfile -> add_file($filedata"../file_pdf/".$file);
        }
        
$filename $outCompleto;
        
$fd fopen($filename"wb");
        
$out fwrite($fd$zipfile -> file());
        
fclose($fd);
        
$this->fileZip $dataOraSQL.".zip";
        return 
true;
    }
    function 
getFileZip() { return $this->fileZip; }

ed anche il codice della class zipfile della pillola in questione:
Codice 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]http://www.themepark.com[/url][/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]http://www.atlant.ru[/url][/url]

*/

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

class zipfile   
{   

    var 
$datasec = array(); // array to store compressed data
    
var $ctrl_dir = array(); // central directory    
    
var $eof_ctrl_dir "x50x4bx05x06x00x00x00x00"//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 "x50x4bx03x04";
        
$fr .= "x0ax00";    // ver needed to extract
        
$fr .= "x00x00";    // gen purpose bit flag
        
$fr .= "x00x00";    // compression method
        
$fr .= "x00x00x00x00"// 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]http://support.microsoft.com/suppor...s/Q125/0/19.asp[/url][/url]

        // now add to central record
        
$cdrec "x50x4bx01x02";
        
$cdrec .="x00x00";    // version made by
        
$cdrec .="x0ax00";    // version needed to extract
        
$cdrec .="x00x00";    // gen purpose bit flag
        
$cdrec .="x00x00";    // compression method
        
$cdrec .="x00x00x00x00"// 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 "x00x00x10x00";
        
$ext "xffxffxffxff";   
        
$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);    ho dovuto commentarlo perchè interpreta male il "/" e da errore!
        //$name = str_replace("", "", $name);

        
$fr "x50x4bx03x04";
        
$fr .= "x14x00";    // ver needed to extract
        
$fr .= "x00x00";    // gen purpose bit flag
        
$fr .= "x08x00";    // compression method
        
$fr .= "x00x00x00x00"// 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 "x50x4bx01x02";
        
$cdrec .="x00x00";    // version made by
        
$cdrec .="x14x00";    // version needed to extract
        
$cdrec .="x00x00";    // gen purpose bit flag
        
$cdrec .="x08x00";    // compression method
        
$cdrec .="x00x00x00x00"// 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
            "
x00x00";                             // .zip file comment length
    }