Datei wurde generiert und soll gleich downgeloaded werden
Ralf Heumann
- php
0 wahsaga0 Ralf Heumann0 wahsaga0 Thomas Luethi
0 Thomas Luethi0 lachesis0 Ralf Heumann0 Tom
Hallo Leute.
Ich habe soeben eine Funktion geschrieben, welche mir Datenbankdaten ausgibt, und aus dem ganzen eine .csv - Datei generiert welche im gleichen Ordner gespeichert wird.
Ich möchte jedoch, dass diese Datei sofort wenn sie erstellt wurde downgeloaded wird.
Dazu dachte ich könnte ich mit header("Location: ...); arbeiten:
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".$filename);
exit;
Alles was jedoch passiert ist, dass die Datei angelegt wird und anschließend erscheint der Inhalt der CSV-Datei im Browserfenster, es erscheint aber kein Fenster zum Speichern der Datei ("[Öffnen] [Speichern unter..])
Was kann ich tun?!
MFG Ralf Heumann
hi,
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".$filename);
exit;Alles was jedoch passiert ist, dass die Datei angelegt wird und anschließend erscheint der Inhalt der CSV-Datei im Browserfenster,
ich nehme an, diese ausgabe hast _du_ in deinem script veranlasst? (echo, print, readfile, ...)
es erscheint aber kein Fenster zum Speichern der Datei ("[Öffnen] [Speichern unter..])
vor header() darf _keinerlei_ ausgabe an den client erfolgt sein.
gruss,
wahsaga
Alles was jedoch passiert ist, dass die Datei angelegt wird und anschließend erscheint der Inhalt der CSV-Datei im Browserfenster,
ich nehme an, diese ausgabe hast _du_ in deinem script veranlasst? (echo, print, readfile, ...)
nope: Eine Ausgabe erfolgt nicht.
Wenn mein File der erstellt wird payment.csv heisst erscheint der Inhalt der Datei im Browserfenster so als würde ich eine TXT Datei öffnen. Tatsächlich handelt es sich bei der zu generierenden Datei ja auch um TEXT, das ganze bekommt jedoch nur die Dateiendung .csv
Das Endergebnis ist jedoch trotzdem, dass man die Datei in Zellen geordnet in Excel anschauen kann.
Wenn ich als zu erstellenden Filenamen jedoch payment.zip wähle funktioniert das ganze so wie ich es gerne mit csv hätte wie folgender Link beweist:
http://test.scientic.de/csv/getcsv.php
Datei wird generiert, erstellt und gespeichert und der Header leitet sofort darauf weiter...
gruss,
wahsaga
Ja Gruß zurück ...
hi,
nope: Eine Ausgabe erfolgt nicht.
dann dürfte thomas mit seiner vermutung [pref:t=71809&m=413560] wohl richtiger liegen.
gruss,
wahsaga
dann dürfte thomas mit seiner vermutung [pref:t=71809&m=413560] wohl richtiger liegen.
Exactly.
MFG
Ralf heumann
Hallo,
Wenn mein File der erstellt wird payment.csv heisst erscheint der Inhalt der Datei im Browserfenster so als würde ich eine TXT Datei öffnen.
Guck mal, mit welchem Content-Type der Server die Datei rausschickt:
http://cgi.w3.org/cgi-bin/headers
Wenn ich als zu erstellenden Filenamen jedoch payment.zip wähle funktioniert das ganze so wie ich es gerne [...] hätte
Deine Frage geht in die Richtung "Download erzwingen".
Such mal mit diesen Begriffen im Archiv.
ZIP wird oft als zuverlaessigste Loesung empfohlen,
wenn das "Download erzwingen" das wichtigste Ziel
des Webpublishers ist.
Fuer die Benutzer ist es jedoch IMHO viel angenehmer,
wenn sie die Datei direkt verwenden koennen und sie
nicht erst entpacken muessen.
Es waere noch gut zu wissen, wer und wieviele Personen
diese Sache ueberhaupt brauchen werden.
Wenn es nur ein paar wenige Personen betrifft, und diese
oft damit arbeiten muessen, waere ggf. "Erziehung"
bzw. Browser-Wechsel die sinnvollste Variante.
Wenn also der MS IE die Datei einfach anzeigt (trotz
korrektem MIME-Type), waere noch eine Moeglichkeit,
eine winzige HTML-Seite auszugeben und dort einen
Link auf die CSV-Datei anzubieten mit der Beschreibung
von "Rechtsklick -> Speichern unter..."
(bzw. "Lange klicken -> Speichern unter" fuer Mac-Userlein.)
Gruesse,
Thomas
Hallo,
Dein Ansatz scheint mir richtig zu sein.
Alles was jedoch passiert ist, dass die Datei angelegt wird und anschließend erscheint der Inhalt der CSV-Datei im Browserfenster,
Liegt vermutlich daran, dass die CSV-Datei vom Server als text/plain
ausgeliefert wird (ist bei Apache der Standard fuer saemtliche
"unbekannten" Dateien) und der Browser deshalb denkt:
"das kenn ich - das zeige ich selbst an!".
Bennene die CSV-Datei mit der Dateiendung .csv, und ordne
dieser Endung einen spezifischen MIME-Type zu.
Sinnvoll waere z.B.
text/comma-separated-values
Dazu reicht bei Apache-Servern eine Zeile:
AddType text/comma-separated-values .csv
http://selfhtml.teamone.de/diverses/mimetypen.htm
Gruesse,
Thomas
Dazu reicht bei Apache-Servern eine Zeile:
AddType text/comma-separated-values .csv
Ahaa.. aber scheinbar kann ich diesen Ausdruck nicht in mein Script als Parameter integrieren oder?!
Leider habe ich keine Zugriffsrechte am Apache-Server um Einstellungen vorzunehmen..
Hallo,
Leider habe ich keine Zugriffsrechte am Apache-Server um Einstellungen vorzunehmen..
Versuch es zumindest mal - einfach eine .htaccess machen
und ins betreffende Verzeichnis hochladen.
AddType ist oft zugelassen, auch wenn andere Dinge
nicht funktionieren bzw. nicht erlaubt sind.
AddType text/comma-separated-values .csv
Gruesse,
Thomas
Hi,
ich schätze es liegt daran, dass der IE csv Daten anzeigen kann (mit irgendeinem plugin)
Zeigt er es auch an, wenn Du sie nicht .csv nennst?
Grüßle
Alles was jedoch passiert ist, dass die Datei angelegt wird und anschließend erscheint der Inhalt der CSV-Datei im Browserfenster, es erscheint aber kein Fenster zum Speichern der Datei ("[Öffnen] [Speichern unter..])
*verwirrt*
Ich an nicht wirklich sagen woran es liegt, aber jetzt funktioniert es plötzlich, dass die .csv Datei im IST-Zustand heruntergeladen werden kann und der Inhalt NICHT mehr im Browser angezeigt wird...
Test -> http://test.scientic.de/csv/getcsv.php
Vielen Dank für die Unterstützung vor allem an Thomas, auch wenn ich jetzt (seltsamerweise) deine Hilfe nicht mehr benötige.
Ich melde mich hier wieder falls es "seltsamerweise" auf einmal wieder nicht funktionieren sollte ...
;)
MFG Ralf Heumann
Hallo,
Ich muss Dich enttaeuschen.
Es "funktioniert" nicht.
Opera 5.12 zeigt die Datei
http://test.scientic.de/csv/payment.csv
direkt an.
http://cgi.w3.org/cgi-bin/headers?url=http%3A%2F%2Ftest.scientic.de%2Fcsv%2Fgetcsv.php
302 Found
X-Powered-By: PHP/4.3.4
Server: Apache
Connection: close
Location: http://test.scientic.de/csv/payment.csv
Date: Mon, 09 Feb 2004 11:07:06 GMT
Content-Type: text/html
200 OK
Content-Length: 223
Accept-Ranges: bytes
Server: Apache
Last-Modified: Mon, 09 Feb 2004 11:07:06 GMT
Connection: close
Etag: W/"3253451-df-402769da"
Date: Mon, 09 Feb 2004 11:07:06 GMT
Content-Type: text/plain
=> Die generierte payment.csv wird als "text/plain" ausgeliefert.
Gruesse,
Thomas
Content-Type: text/html
:-/
Ich denke nicht, dass auf meinem Webserver ein Zip-Plugin installiert ist ...
Nun.. Pech: müssen sich die User eben den (!!)angezeigten Inhalt(!!) selbst in einer CSV Datei speichern...
Vorübergehend ist das wohl nicht tragisch. Das Script wandert in ein paar Wochen sowieso auf meinen bald bestellten Root-Server. Dort kann ich dann den Apache wenigstens gescheit administrieren und das Problem lösen ...
Ich hätte das Script nur eben gerne Freunden und Bekannten für ihre Zwecke gegeben.
MFG
Ralf Heumann
Hallo,
Ich denke nicht, dass auf meinem Webserver ein Zip-Plugin installiert ist ...
Brauchst Du auch nicht.
Ebensowenig wie Root-Zugriff oder Zugriff auf httpd.conf.
Wie gesagt, wuerde ich zuerst mal versuchen,
mit einer .htaccess-Datei dem Webserver
beizubringen, .csv als "text/comma-separated-values"
auszuliefern.
Nun.. Pech: müssen sich die User eben den (!!)angezeigten Inhalt(!!) selbst in einer CSV Datei speichern...
Das faende ich halb so tragisch.
Ich hätte das Script nur eben gerne Freunden und Bekannten für ihre Zwecke gegeben.
Da sehe ich kein Problem.
Die .htaccess gehoert dann einfach zum "Paket" dazu...
(Wirkt natuerlich nur auf Apache und evtl. einigen
anderen Servern, aber der Apache ist ja schon mal
sehr weit verbreitet. Und wer einen anderen Server
hat, weiss hoffentlich selbst, ob und wie er
.csv-Dateien einen bestimmten MIME-Type zuordnen kann...)
Gruesse,
Thomas
Hello,
probier doch bitte mal die Funktion aus. Ich habe damit bisher keine Probleme gehabt und immer das Download-Fenster
[ ] Datei von diesem Ort öffnen
[ ] Datei speichern
bekommen.
Kann es sein, dass das ganz individuell von den eingestellten Assoziationen des Clients abhängig ist?
#--------------------------------------------------------------------
function sendscript($path, $filename)
{
$filename = basename($filename);
$filepath = $path."/".$filename;
$len = @filesize($filepath);
$fh = @fopen($filepath,"r");
if (!$fh) return false;
$data = fread($fh, $len);
fclose($fh);
$header = "";
$header .= "Content-Type: text/plain\r\n";
$header .= "Content-Disposition: attachment; filename="$filename"\r\n";
$header .= "Content-type: application/force-download\r\n";
$header .= "Accept-Ranges: bytes\r\n";
$header .= "Content-Length: $len\r\n";
header($header);
echo $data;
return true;
}
Liebe Grüße aus http://www.braunschweig.de
Tom