Um Verzeichnisse rekursiv zu einem Zip Archiv hinzuzufügen kann folgendes Script verwendet werden:
public function zipDir(&$zip, $dir, $base = “)
{
  if (!file_exists($dir));
  $arFiles = scandir($dir);
  foreach ($arFiles as $file)
  {
    if (in_array($file, array(‚.‘, ‚..‘))) continue;
    if (is_file($dir.’/‘.$file))
    {
      $zip->addFile($dir.’/‘.$file, $base.$file);
    }
    else if (is_dir($dir.’/‘.$file))
    {
      $zip->addEmptyDir($base.$file);
      zipDir($zip, $dir.’/‘.$file, $base.$file.’/‘);
    }
  }
}
Der Aufruf kann dann wie folgt aussehen:
$tmpzip = tempnam("/tmp", "wpShopGermany");
$zip = new ZipArchive;
$res = $zip->open($tmpzip, ZipArchive::CREATE);
// Verzeichnisse
zipDir($zip, ‚/var/home/htdocs/wpShopGermany/wp-content/uploads/wpsg_produktbilder‘, ‚wpsg_produktbilder/‘);
$zip->close();
header("Cache-Control: private");
header(‚Content-Type: application/download; charset=utf-8‘);
header(‚Content-Disposition: filename=wpsg_upgrade.zip‘);
header("Pragma: public");
session_cache_limiter(’nocache‘);
die(file_get_contents($tmpzip));
Das Zip Archiv würde dabei direkt als Download an den Browser übergeben werden.