Snucky: Zlib: Ordnerinhalt in Archiv ablegen und zum DL anbieten

Ein Datei-Explorer soll mittels Auswahl eines Verzeichnisses dessen Dateiinhalte zum Download in einem Archiv anbieten. Jetzt habe ich ca. eine Stunde recherchiert und mit der zlib-Erweiterung gebastelt. Ich poste mal den (Pseudo-)Code:

  
$gz_nme = 'ein_baldiges_archiv.gz';  
if ($archiv = gzopen($gz_nme,'wb9'))  
  foreach (hole_einzeln_pfade_der_dateien() as $i=>$pfad)  
    if ($tmp_fle = fopen($pfad,'rb'))  
      while (!feof($tmp_fle))  
    gzwrite($archiv, fread($tmp_fle,1024*512));  
else return;  
  
header("Content-Disposition: attachment; filename=\"".$gz_nme.'"');  
header("Content-type: application/gzip");  
header("Cache-Control: public, must-revalidate");  
readgzfile($archiv);  
gzclose($archiv);  

Leider ist das tatsächlich generierte Archiv mal gähnend leer... Vielleicht hilft mir ein Link zu einem Beispiel ja auch ausreichend! Nur haben meine Google Suchen nix Hilfreiches ausgespuckt..

  1. echo $begrüßung;

    $gz_nme = 'ein_baldiges_archiv.gz';

    gz ist kein Archiv-Format. Damit lassen sich nur einzelne Dateien komprimieren. Es ist üblich, sich zuerst ein tar-Archiv anzulegen und dieses dann zu gzippen. Für tar bietet PHP keine direkte Unterstützung, aber in PEAR ist ein Paket dazu zu finden.

    Außerdem solltest du den richtigen Gebrauch von readgzfile() im Handbuch nachschlagen.

    echo "$verabschiedung $name";

    1. gz ist kein Archiv-Format. Damit lassen sich nur einzelne Dateien komprimieren.

      .. Das erklärt einiges! Und deshalb bin ich ja um dieses Forum so dankbar!

      Außerdem solltest du den richtigen Gebrauch von readgzfile() im Handbuch nachschlagen.

      .. ich habe mir schon Mühe gegeben ...

      Schaue jetzt mal bei PEAR rein...

      Danke! (schon früher festgestellt, dass von dir sehr kompetente Beraten zu erhalten ist - danke für diese Ausdauer, $name ;p)

  2. Hi,

    Ein Datei-Explorer soll mittels Auswahl eines Verzeichnisses dessen Dateiinhalte zum Download in einem Archiv anbieten.

    S. z.B. Coding-Schnippsel: ZIP2

    Beispiel um Ordner /data ohne Unterverzeichnisse zu zippen und als Download zu schicken:

    $path2zip=$_SERVER['DOCUMENT_ROOT'].'/data';
    $z=new ZIParchive();
    $newzip=$z->zip($path2zip,'%DOWNLOAD%',TRUE,TRUE);

    Das 1. TRUE bedeutet: Dateien ausschließen (= keine Unterverzeichnisse)
    Das 2. TRUE bedeutet: Name des Verzeichnisses wird ebenfalls gesichert

    (beide TRUEs können auch weggelassen werden, da es sich um die Defaulteinstellung handelt)

    Der (beim Download vorgeschlagene) Name des ZIP-Archivs wird automatisch (aus dem Ordnernamen) gebildet, kann aber auch frei gewählt werden.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!