Download-Dialog erzeugen

Hallo Zusammen!

Ich habe folgendes Problem:

Ich erzeuge eine Textdatei mit ein paar zu exportierenden Daten.
Nun möchte ich, dass diese in einem Downloaddialog zum speichern angeboten werden, das klappt leider nicht. Es wird permanent der Inhalt der Datei im Browser dargestellt.

Hier mal der Quelltext:

header(„HTTP/1.1 200 OK“);
header(„Content-Type: application/octetstream“);
header(„Content-Disposition: attachment; filename=„export.txt““);
readfile(„export.txt“);

Kann mir jemand uU bitte WEiterhlefen, dahcte eigtl., dass es so klappen müsste.

Danke im Voraus!

Habanera

Hallo Zusammen!

Ich habe folgendes Problem:

Ich erzeuge eine Textdatei mit ein paar zu exportierenden
Daten.
Nun möchte ich, dass diese in einem Downloaddialog zum
speichern angeboten werden, das klappt leider nicht. Es wird
permanent der Inhalt der Datei im Browser dargestellt.

Hier mal der Quelltext:

header(„HTTP/1.1 200 OK“);
header(„Content-Type: application/octetstream“);
header(„Content-Disposition: attachment;
filename=„export.txt““);
readfile(„export.txt“);

Kann mir jemand uU bitte WEiterhlefen, dahcte eigtl., dass es
so klappen müsste.

…müsste es auch, nimm einmal einen anderen Browser, der IE meint leider, sich neben dem Content Type auch die Dateiendung und den Inhalt beurteilen zu müssen, und danach zu entscheiden, ob er die Datei anzeigt oder downloaded.

Evtl hilft zusätzlich
header(‚Expires: 0‘);
header(‚Cache-Control: must-revalidate, post-check=0,pre-check=0‘);
header(‚Pragma: public‘);

beim IE, allerdings, bei .txt ist das eher fraglich.
Immerhin, MS gibt zu, das es ein Bug ist: http://support.microsoft.com/default.aspx?scid=kb;EN…
Evtl. hilft es, die Dateiendung zu ändern…

Für alle anderen Browser sind deine Zeilen (fast) korrekt, nur der Content-Type muss lt. RFC application/octet-stream sein (für den IE ist die Variante ohne „-“ aber besser).

Alexander

Hi ALex!

Ja, Danke! Hab das mal noch eingefügt & Dateiendung geändert. Dann klappt es.

Nur noch ein was, vielleicht weißt du oder jemand anderes das:

wenn ich nachdem er die Datei senden soll
ein

header(„Location: kasse.php“)

schreibe, ignoriert er das Dateisenden. Bzw. umgekehrt die Locationanweisung.

Wie kann ich den dazu übereden, das er nachdem die Datei gespeichert wurde, die andere Seite geladen wird?

DANKE!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi ALex!

Ja, Danke! Hab das mal noch eingefügt & Dateiendung geändert.
Dann klappt es.

Nur noch ein was, vielleicht weißt du oder jemand anderes das:

wenn ich nachdem er die Datei senden soll
ein

header(„Location: kasse.php“)

schreibe, ignoriert er das Dateisenden. Bzw. umgekehrt die
Locationanweisung.

Logisch, PHP macht daraus einen 302 Header :wink:
Hinter Location gehört außerdem immer die komplette URL, auch wenn es die meisten Browser auch so verstehen…

Wie kann ich den dazu übereden, das er nachdem die Datei
gespeichert wurde, die andere Seite geladen wird?

Evtl.
Header(„Refresh: 10;URL=http://neue_seite“);

Aber keine Ahnung, ob das funktioniert…
Die 10 ist die Anzahl der Sekunden, nach welchen die neue Seite geladen werden soll.

Alexander

wenn ich nachdem er die Datei senden soll
ein

header(„Location: kasse.php“)

schreibe, ignoriert er das Dateisenden. Bzw. umgekehrt die
Locationanweisung.

Wie kann ich den dazu übereden, das er nachdem die Datei
gespeichert wurde, die andere Seite geladen wird?

nää das geht nicht, auf einen request gibt es genau eine antwort.
und location muss immer anstatt http ok kommen, also ganz am anfang.
und nachdem es bereits output gegeben hat (dein readfile), darfst du auch keine weiteren header mehr schicken.

was du machen kannst: auf der seite, auf die du mit location weiterleiten wolltest, mit meta-refresh oder js den dl starten.