[PHP] Textdatei zum Download anbieten

Maschinist

Cadet 2nd Year
Registriert
Okt. 2002
Beiträge
17
Hallo,

ich füttere eine Textdatei mit Daten und möchte jetzt, daß diese ein Besucher meiner Seite downloadet, sie praktisch seinem Browser als Upload aufgedrängelt wird.
(Es soll ihm ein Standard-Download-Fenster erscheinen.)

Dabei wäre es günstig, wenn diese Datei zunächst nicht auf dem Server als physikalische Datei gespeichert würde, sondern lediglich irgendwie über den Server-Cache bereit gehalten wird.

Leider weiß ich nicht recht, wie ich es realisieren kann, ja wonach ich deswegen im Internet (PHP-Seiten) überhaupt suchen soll.

Wer kann weiterhelfen? Was muß mein PHP-Skript enthalten?

Ein weiteres Problem dabei wird sicherlich sein, daß gängige Browser die Endung .txt wohl kennen und diese einfach ungefragt im Browser darstellen werden. Das würde ich auch gerne verhindern wollen. (Die Endung .txt ist natürlich nicht zwingend.)

Ich danke!
Der Maschinist
 
Fortschritt

ok, nun etwas genauer:

ich mache folgendes:

$export = "irgendwelcher Inhalt";
$datei = "dateiname";

// Daten in Datei schreiben
if (file_exists($datei)) unlink ($datei);
$fp = fopen ($datei, "a");
fputs ($fp, $export);
fclose ($fp);

//Datei nochmals zum Lesen öffnen
$fp = fopen ($datei, "r");
header ("Content-Type: $application");
header ("Content-Disposition: attachment; filename=$datei");
header ("Pragma: no-cache");
header ("Expires: 0");
fpassthru ($fp);
fclose ($fp);

// Abschliessend Datei löschen
unlink ($datei);

Ablauf:
---------
Diese Zeilen stehen in einer export.php.
Die Text-Datei wird mit korrektem Inhalt erzeugt.
Ein Download-Fenster springt auf, vorgeschlagener Dateiname ist leider nicht der von mir als $datei gewollter, sondern "export.php", also der Seite, die das Script enthält.
Wo liegt der Fehler???
(Der Inhalt der speicherbaren Datei ist jedenfalls auch schon mal korrekt.)

Die Temporäre Text-Datei wird zuletzt korrekt gelöscht.


Es liegt also nur noch am Dateinamen.
Wer hat eine Idee?

Danke
Der Maschinist
 
Das ist eine heikle Angelegenheit, wenn wie du schon sagtest, entscheidet der Browser, was mit der Datei gemacht wird. Die einzige Möglichkeit, um mit großer Wahrscheinlichkeit das Download-Fenster angezeigt zu bekommen, besteht meiner Meinung nach darin, einen falschen Content-Type abzuschicken. Hier geht wohl nichts an Probieren vorbei.

Dass die Datei unter dem falschen Namen gespeichert wird, kommt mir auch irgendwie bekannt vor. Es gab da mal eine relativ lange Diskussion in der deutschen PHP Newsgroup. Wenn ich mich richtig erinnere, kam man dort zu dem Ergebnis, dass es keine Möglichkeit gibt, bei allen Browsern das gewünschte Ergebnis zu erzielen. Ich finde die Diskussion jetzt leider nicht mehr... :(

PS: Ich kann's kaum fassen, dass mal jemand daran gedacht hat, einen Thread-Prefix zu benutzen! :)
 
(Teil)-lösung

Bin stolz auf mich!

Wider erwarten habe ich das Problem lösen können, nicht gerade elegant, funktioniert jetzt jedenfalls erstmal.

(Für alle, die es interessiert: die variable "$datei" darf nicht "doppelt" bei gleicher Bedeutung verwendet werden. Beim Schreiben der Textdatei auf Festplatte ist eine absolute Pfad-Angabe notwendig, z.B. "c:/pfad/name.ext" , während im
"header ("Content-Disposition: attachment; filename=$datei");
vom Namen ohne Bezug zu Dateisystem d.Rede ist. Es kann also irgendeine Bezeichnung eingesetzt werden...)

Dank @ Steffen für die Antwort.

Thema erledigt!
Der Maschinist:)
 
Zurück
Oben