Hauptmenü

Werkzeuge

Kategorien

Archiv

Verzeichnisse mit PHP rekursiv zippen

Erstellt in PHP am 22. September 2012 vom Daschmi

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.