Salve, premesso che ho seguito le istruzioni su questo thread:
http://forum.html.it/forum/showthrea...ostid=12215832
usando la libreria ic.zip.php (http://www.web-works.it/2008/08/zipp...rtella-in-php/)

Ho modificato il codice della libreria perchè generava alcuni warning in questo:
ic.zip.php
Codice PHP:
<?php
include("zip.lib.php");

ini_set("memory_limit","500M");

define("SZIP_DUMP",'dump');
define("SZIP_FILE",'file');
define("SZIP_SAVE",'save');

# ======
# INIZIALIZZAZIONE DELLA CLASSE 

class iczip 
{
    var 
$zip;
    var 
$options;
    var 
$base_dir;

    function 
iczip($warn true$safe true)
    {
        
$this->zip = new zipfile;
        
$this->options['warn'] = $warn;
        
$this->options['safe'] = $safe;
    }

# ======
# ADATTA UNA DIRECTORY IN MANIERA RICORSIVA

    
function addDirRecursive($dir)
    {
        
//Aggiusto la directory
        
$str_tot strlen($dir);
        if (
$dir[$str_tot-1] == '/')
        {
            
$dir_app $dir;
            
//unset($dir);
            
$dir '';
            for(
$i=0;$i<($str_tot-1);$i++)
                
$dir .= $dir_app[$i];
        }
    
        if(
$this->base_dir == NULL)
        {
            
$folders split("/"$dir);
            
$last count($folders);
            
$this->zip->addDir($folders[$last-1]);
            for(
$i=0;$i<($last-1);$i++)
            {
                if(
$i!=0)    
                    
$this->base_dir .= "/".$folders[$i];
                else
                    
$this->base_dir .= $folders[$i];
            }
            
        }
        
$arr=$this->ls_a($dir);
        foreach (
$arr as $fn)
        {
            if(
$fn)
            {
                if(
is_dir("$dir/$fn"))
                {
                    
$this->zip->addDir(str_replace($this->base_dir."/"''"$dir/$fn"));
                    
$this->addDirRecursive("$dir/$fn");
                }
                else
                {
                    
$fname str_replace($this->base_dir."/"''"$dir/$fn");
                    
$this->zip->addFile(implode('',file("$dir/$fn")),$fname);
                }
    
            }
        }
    }


# ======
# FUNZIONE DI APPOGGIO X addDirRecursive()
    
function ls_a($dir)
    {
        if (
$handle opendir($dir))
        {
            while (
false!== ($file readdir($handle)))
            {
                if (
$file!= "." && $file!= ".." )
                {
                    
//if(!$files) $files="$file";
          
if(!isset($files)) $files="$file";
                    else 
$files="$file\n$files";
                }
            }
        
closedir($handle);
        }
        
$arr=explode("\n",$files);
        return 
$arr;
    }
# ======
# ADATTA UN SINGOLO FILE

    
function addSingeFile($file)
    {
        if(
is_file($file))
        {
            
$folders split("/"$file);
            
$last count($folders);
            
$file_name $folders[$last-1];
            
$this->zip->addFile(implode('',file($file)),$file_name);
        }    
    } 
# ======
# CREAZIONE DEL FILE ZIPPATO

    
function render($file,$type 'dump')
    {
        if (
$type == 'dump')
        {
            
header('Content-type: application/zip');
            
header('Content-Disposition: attachment; filename="'.$file.'"');
            echo 
$this->zip->file();
        }
        elseif (
$type == 'save')
        {
            @
unlink($file);
            
$f fopen($file,'a+');
            
fwrite($f,$this->zip->file());
            
fclose($f);
        }
    }

}
?>