Petra: Zipen und senden ohne Temp. Datei

  
<?php  
  
/*  
Hallo allerseits,  
gibt es eine Moeglichkeit, in diesem kurzen Beispiel auf die Tenp.  
Datei zu verzichten? In dem Beispiel. das auf einen WWW-Server laufen  
muss, zipt diese Script sich selbst und sendet das Zipergebnis zum  
Browser.  
Die Frage ist nicht akademisch. Ich möchte mit der Methode grosse  
Datenmengen versehnden und hoffe ohn Temp. Datei auf einge Vorteile  
(ueberschreiten vom Limits durch den Provider, Suche nach dem echten  
Temp. Verzeichnis).  
  
*/  
  
// Variablen  
$zip = new ZipArchive();                    // Objekt  
$temp_zip_file = tempnam ('.', 'temp_zip'); // temp. Zip-Archiv  
$file_to_zip = __FILE__;                    // Datei die gezipt wird  
  
// Zipfile anlegen  
$zip->open($temp_zip_file, ZIPARCHIVE::CREATE);  
$zip->addFile( $file_to_zip, basename($file_to_zip) );  
$zip->close();  
  
// Header vorbereiten damit der Browser weiss was zu tun ist.  
header('Content-type: application/zip');  
header('Content-Disposition: filename="Sicherung_vom_Server.zip"');  
  
// Zip-Datei senden  
readfile($temp_zip_file);  
  
// Temp-Datei loeschen  
unlink($temp_zip_file);  
  
?>  

  1. Hi,

    gibt es eine Moeglichkeit, in diesem kurzen Beispiel auf die Tenp.
    Datei zu verzichten?

    php://memory bzw. php://temp wären eine Möglichkeit.

    Die Frage ist nicht akademisch. Ich möchte mit der Methode grosse
    Datenmengen versehnden und hoffe ohn Temp. Datei auf einge Vorteile

    Wie bspw. vollgeknallten Speicher ...?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. gibt es eine Moeglichkeit, in diesem kurzen Beispiel auf die Tenp.
      Datei zu verzichten?

      php://memory »» bzw. php://temp wären eine Möglichkeit.

      Die Frage ist nicht akademisch. Ich möchte mit der Methode grosse
      Datenmengen versehnden und hoffe ohn Temp. Datei auf einge Vorteile

      Wie bspw. vollgeknallten Speicher ...?

      Ich wolle die Daten nicht im RAM bunkern sondern sie direkt zum Browser
      schicken während das ZIP-Objekt arbeitet.

      Habe es mit "php://stdout" probiert aber das funktioniert nicht. Ich
      denke es liegt daran, dass "php://stdout" ein Datei-Handle und kein
      Datei-Name ist (das Zip-Objekt will einen Namen).

      Mir gehts also darum, die Daten on-the-fly rauszuschicken. Ob ich mit "php://stdout" alles richtig gamacht habe weiss ich nicht - ich glaube
      aber schon.

      Gruss, Petra

      1. Hi,

        Ich wolle die Daten nicht im RAM bunkern sondern sie direkt zum Browser
        schicken während das ZIP-Objekt arbeitet.

        Hast du irgendeinen Anhaltspunkt dafür gefunden, dass das mit der ZipArchive-Klasse möglich sein soll?
        Wenn die das nicht implementiert hat, die Daten „häppchenweise“ rauszurücken, wird das vermutlich schiwerig.

        Mir gehts also darum, die Daten on-the-fly rauszuschicken.

        Das ZIP-Archivformat an sich dürfte das theoretisch unterstützen - das enthält laut Wikipedia zunächst die einzelnen Dateien, und erst zum Schluss ein “central directory”, dass die Dateinamen und Metadaten enthält.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          Ich wolle die Daten nicht im RAM bunkern sondern sie direkt zum Browser
          schicken während das ZIP-Objekt arbeitet.

          Hast du irgendeinen Anhaltspunkt dafür gefunden, dass das mit der ZipArchive-Klasse möglich sein soll?
          Wenn die das nicht implementiert hat, die Daten „häppchenweise“ rauszurücken, wird das vermutlich schiwerig.

          Naja - schwierig ist ja relativ - der Grund warum ich hier schreibe ist, dass ich es als schwierig empfinde :-)

          Mir gehts also darum, die Daten on-the-fly rauszuschicken.

          Das ZIP-Archivformat an sich dürfte das theoretisch unterstützen - das enthält laut Wikipedia zunächst die einzelnen Dateien, und erst zum Schluss ein “central directory”, dass die Dateinamen und Metadaten enthält.

          Ja, so sehe ich das auch. Ich hatte gehofft, das es möglich ist, dass das Zip-Objekt zumimindest nach jeder neuen Datei einen Output in die Zipdatei macht der dann direkt auf Netz gehen könnte ...

          Danke fürs Mitdenken!!! Und gute Nacht, P. (ich gucke morgen nochmal rein)

  2. Nachtrag: ich bin nicht auf das ZIP-Format festgelegt. Falls es beispielsweise eine Möglichkeit gibt, das beim TAR-Format die Daten on-the-fly zum Browser geschickt werden wäre das auch okay. Beim ZIPen intressiert mich die Containerfunktion - nicht die Komprimierung.

    Gruss, P.