String direkt als Dateidownload anbieten
Manfred
- php
0 lulu0 Peete0 Cheatah0 Manfred0 Mathias Brodala0 Karin
0 Danke! Problem gelöst.
Manfred0 Cheatah
Hallo zusammen,
mein Problem sieht folgendermaßen aus:
Auf meinem Linux-Server liegt eine verschlüsselte Datei. Der User trägt in ein Formular ein Passwort ein, PHP nimmt das Passwort, liest die verschlüsselte Datei ein, entschlüsselt die Daten mit dem Passwort und schreibt den entschlüsselten String in eine Variable.
Soweit perfekt.
Um jetzt allerdings die Datei zum Download anzubieten, schreibe ich den entschlüsselten String in eine Datei und biete diese Datei über
header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="upload/decrypted_'.$_POST['timestamp_filename'].'"');
header('Content-Length: '.filesize('upload/decrypted_'.$_POST['timestamp_filename']));
readfile('upload/decrypted_'.$_POST['timestamp_filename']);
zum Download an. Dadurch liegt jetzt eine unverschlüsselte Datei im Dateisystem. Ich möchte nicht nach einer gewissen Zeit prüfen, ob die Datei entfernt werden kann, sondern ich möchte erst gar keine entschlüsselte Datei ins Dateisystem schreiben.
-------------------------------
Frage: Gibt es eine Möglichkeit in PHP, den entschlüsselten String direkt so zum Browser des Users zu leiten, dass im Browser der String als Datei (über das Dateidownload-Fenster) gespeichert werden kann? Es sollen keine unverschlüsselten Daten im Dateisystem des Servers abgelegt werden müssen.
Viele Grüße,
Manfred
Huhu Manfred,
Du kannst doch nach der Header-Ausgabe statt readfile den entschlüsselten String direkt ausgeben.
Ohne Umweg über eine Datei im Filesystem.
Oder Du löscht diese Datei direkt nach dem Download.
Oder ist das jetzt zu einfach gedacht?
Viele Grüße
lulu
// Header - Kram
echo $decryptedString;
Hi,
Um jetzt allerdings die Datei zum Download anzubieten, schreibe ich den entschlüsselten String in eine Datei
ein Download ist der Download einer _Ressource_ - wir befinden uns schließlich in HTTP. Es existiert nicht die geringste Notwendigkeit, dass eine Datei (oder auch nur ein Filesystem) vorhanden sein muss. Liefere also einfach die Daten aus, ohne Umweg über irgendwelche Dateien.
header('Content-Disposition: attachment; filename="upload/decrypted_'.$_POST['timestamp_filename'].'"');
Das Ding heißt file_name_, nicht file_path_. Auf den meisten Systemen ist der Slash als Zeichen in Dateinamen ungültig.
Ich möchte nicht nach einer gewissen Zeit prüfen, ob die Datei entfernt werden kann, sondern ich möchte erst gar keine entschlüsselte Datei ins Dateisystem schreiben.
Ja.
Frage: Gibt es eine Möglichkeit in PHP, den entschlüsselten String direkt so zum Browser des Users zu leiten,
Natürlich. Oder schreibst Du beim Erzeugen einer HTML-Ressource auch erst eine HTML-Datei aus? Nichts anderes passiert hier?
Cheatah
Hallo,
erstmal vielen danke für die Antworten.
Was ich allerdings bei allen Antworten nicht ganz verstanden habe: das was ihr vorschlagt, nämlich die Daten nicht erst zu schreiben sondern direkt auszuliefern, ist ja genau meine Fragestellung gewesen:
Nämlich, _WIE_ ich die Daten direkt ausliefern kann, so dass sie beim Browser des Users als Dateidownload auftauchen und gespeichert werden können. Das hat leider niemand beantwortet (beantworten können?).
Ich suche eben diese Funktion / Methode in PHP, mit der ich PHP die Anweisung geben kann -> diese Daten jetzt als Stream oder was auch immer an den User-Browser schicken und ein Download-Fenster aufpoppen lassen.
Viele Grüße,
Manfred
Hallo Manfred.
Nämlich, _WIE_ ich die Daten direkt ausliefern kann, so dass sie beim Browser des Users als Dateidownload auftauchen und gespeichert werden können. Das hat leider niemand beantwortet (beantworten können?).
Doch, jeder einzelne der Antwortenden hat dir diese Frage beantwortet. Lesen musst du schon selbst.
Einen schönen Freitag noch.
Gruß, Mathias
Hallo Manfred,
Nämlich, _WIE_ ich die Daten direkt ausliefern kann, so dass sie beim Browser des Users als Dateidownload auftauchen und gespeichert werden können. Das hat leider niemand beantwortet (beantworten können?).
so, wie lulu es Dir vorgeschlagen hat. Du hast den String
in einer Variablen. Schreibe diesen nicht in eine Datei
und ersetze Dein "readfile(...)" durch ein echo $variable.
Probier's einfach mal aus.
LG Karin
Hallo,
so funktionierts:
$inhalt = "... entschlüsselte Daten ..."
header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="irgendein_dateiname.zip"');
echo ($inhalt);
Vielen Dank für die Lösung! Entschuldigt, dass ich aufm Schlauch gestanden bin, aber echo hörte sich auch viel zu einfach an ;)
Viele Grüße,
Manfred
Hi,
Vielen Dank für die Lösung! Entschuldigt, dass ich aufm Schlauch gestanden bin, aber echo hörte sich auch viel zu einfach an ;)
naja, dafür hast Du das ja jetzt immerhin als mehrfaches Echo erhalten ;-)
Cheatah