Manfred: String direkt als Dateidownload anbieten

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

  1. 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

    --
    bythewaythewebsuxgoofflineandenjoytheday
  2. // Header - Kram
    echo $decryptedString;

  3. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  4. 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

    1. 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

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      debian/rules
    2. 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

  5. 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

    1. 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

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes