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);
}
}
}
?>