Ciao a tutti, Avrei un problemino per creare un file zip in PHP di una intera cartella


Esempio struttura cartella da zippare


CartellaRoot (principale)
All'interno di CartellaRoot mi trovo


Sub1
Sub2
Sub3
....


Io devo zippare tutto il contenuto sia file che sub folder presenti in una cartella presente dentro CartellaRoot


Es. Voglio zippare Sub2


Lo script di seguito lo fà pero nel zip mi mette il contenuto di Sub2. Io vorrei che prima mi scriva Sub2 e dentro il suo contenuto. Non so se mi spiego. In fine non so se sia possibile avere un qualche messaggio che indica che lo script stà lavorando. Grazie a chi può aiutarmi



$infile = $_REQUEST['filezip']; //percorso e nome file zip
$outfile = $_REQUEST['outfile']; //cartella da comprimere


// Get real path for our folder
$rootPath = $outfile;


// Initialize archive object
$zip = new ZipArchive();
$zip->open($infile, ZipArchive::CREATE | ZipArchive::OVERWRITE);


// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);


foreach ($files as $name => $file)
{
// Skip directories (they would be added automatically)
if (!$file->isDir())
{
// Get real and relative path for current file
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);


// Add current file to archive
$zip->addFile($filePath, $relativePath);
}
}




$zip->close();


//ricavo il solo nome del file da scaricare
$pathArr = explode(DIRECTORY_SEPARATOR, $infile);
$filename = end($pathArr);
echo $filename;


//download file zip creato
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".$filename);
header("Content-length: " . filesize($infile));
header("Pragma: no-cache");
header("Expires: 0");
readfile($infile);