Zipen und senden ohne Temp. Datei
Petra
- php
<?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);
?>
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
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 VorteileWie 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
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
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)
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.