Hauptmenü

Werkzeuge

Kategorien

Archiv

array_merge ohne neuindexierung

Erstellt in PHP am 1. November 2012 vom Daschmi

array_merge arbeitet standardmäßig so, das numerische Schlüssel in dem zusammengefügten Array neu vergeben werden. Folgende Funktion verhindert dies auf simple Weise:


/**
* Array Merge und Indexe nicht neu nummerieren
* Siehe: http://de2.php.net/manual/de/function.array-merge.php#106803
*/
function dsr_array_merge($a, $b)
{

$result = array_diff_key($a, $b) + $b;

return $result;

} // function dsr_array_merge($a, $b)

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.