L'API actuelle ne permet pas d'archiver un répertoire directement
Dans Mes Fichiers, on choisit le contenu de l'archive désirée en sélectionnant des fichiers (mes_options.php, par exemple) ou des répertoires (tmp/ieconfig/, par exemple). Lors de l'appel de PCLZIP, la liste des choix est passée telle qu'elle sans chercher à lister les fichiers du répertoire éventuellement sélectionné.
Aujourd'hui, Phardata et ZipArchive ont l'air de ne proposer que des ajouts de fichiers et refusent l'ajout direct d'un répertoire.
Je trouve ce comportement largement insuffisant surtout que certains répertoires peuvent être composés eux-mêmes de répertoires inclus. Je ne pense pas que ce soit à l'appelant de gérer cette difficulté.
Aussi, je pense qu'il faudrait gérer cela dans emballer() et boucler récursivement dans le répertoire considéré. Sur stackoverflow j'ai trouvé le code suivant donc on pourrait s'inspirer :
// Get real path for our folder
$rootPath = realpath('folder-to-zip');
// Initialize archive object
$zip = new ZipArchive();
$zip->open('file.zip', 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 archive will be created only after closing object
$zip->close();