File an Browser senden
TomIRL
- php
Hallo liebe Forumsgemeinde,
Ich lese Daten aus einer MySQl Datenbank aus, und speichere diese in einem Textfile.
Da geht auch so weit...
Nun versuche ich dieses Textfile an den Browser zu senden...
Das geht nicht:
if ($_POST['senden']){
$file="senden.txt";
$fp = fopen($file,"rb");
$buffer = fread($fp, filesize("$file"));
fclose($fp);
header('Content-type: application/x-octet-stream');
header('Content-disposition: attachment; filename=' . $file);
echo $buffer;
}
Mir werden die Daten die in diesem Textfile drin sind auf der Seite angezeigt.
Wie kann ich den korrekten Header an den Browser senden, so dass der Browser je nach Einstellung, den öffnen Dialog anbietet oder eben sofort speichert?
Viele Dank auch für evtl. Links
TomIRL
Hi TomIRL,
Nun versuche ich dieses Textfile an den Browser zu senden...
Das geht nicht:if ($_POST['senden']){
$file="senden.txt";
$fp = fopen($file,"rb");
$buffer = fread($fp, filesize("$file"));
fclose($fp);
header('Content-type: application/x-octet-stream');
header('Content-disposition: attachment; filename=' . $file);
echo $buffer;}
Mir werden die Daten die in diesem Textfile drin sind auf der Seite angezeigt.
Wie kann ich den korrekten Header an den Browser senden, so dass der Browser je nach Einstellung, den öffnen Dialog anbietet oder eben sofort speichert?
so geht es:
<?php
$file="senden.txt";
header('Content-type: application/x-octet-stream');
header("Content-disposition: attachment; filename=$file");
echo file_get_contents($file);
?>
Gruß, Marian
oops, ich mein natürlich
header('Content-type: text/plain');
wie kommst du auf application/x-octet-stream?
Gruß, Marian
Hello,
wie kommst du auf application/x-octet-stream?
Na, er will eben nicht, dass der Browser die Datei anzeigt, sondern den Dialog erzwingen, sofern man einen Browser überhaupt einigermaßen zu etwas zwingen kann.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hi Tom,
wie kommst du auf application/x-octet-stream?
Na, er will eben nicht, dass der Browser die Datei anzeigt, sondern den Dialog erzwingen, sofern man einen Browser überhaupt einigermaßen zu etwas zwingen kann.
dafür sorgt das content-disposition: attachment; filename=senden.txt
Gruß, Marian
Hello,
wie kommst du auf application/x-octet-stream?
Na, er will eben nicht, dass der Browser die Datei anzeigt, sondern den Dialog erzwingen, sofern man einen Browser überhaupt einigermaßen zu etwas zwingen kann.
dafür sorgt das content-disposition: attachment; filename=senden.txt
Nö, das sorgt nur dafür, dass die mitgesendeten Daten nicht inline im Dokument angezeigt werden, sondern mit dem für den unter Content-Type angegebenen MIME-Type am Client assoziierten Programm angezeigt werden, sofern man activeX-Komponenten auf dem Client zugelassen hat.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hi Tom,
wie kommst du auf application/x-octet-stream?
Na, er will eben nicht, dass der Browser die Datei anzeigt, sondern den Dialog erzwingen, sofern man einen Browser überhaupt einigermaßen zu etwas zwingen kann.
dafür sorgt das content-disposition: attachment; filename=senden.txt
Nö, das sorgt nur dafür, dass die mitgesendeten Daten nicht inline im Dokument angezeigt werden, sondern mit dem für den unter Content-Type angegebenen MIME-Type am Client assoziierten Programm angezeigt werden, sofern man activeX-Komponenten auf dem Client zugelassen hat.
bei mir gibts da keinen unterschied
Gruß, Marian
Hello,
wie kommst du auf application/x-octet-stream?
Na, er will eben nicht, dass der Browser die Datei anzeigt, sondern den Dialog erzwingen, sofern man einen Browser überhaupt einigermaßen zu etwas zwingen kann.
dafür sorgt das content-disposition: attachment; filename=senden.txt
Nö, das sorgt nur dafür, dass die mitgesendeten Daten nicht inline im Dokument angezeigt werden, sondern mit dem für den unter Content-Type angegebenen MIME-Type am Client assoziierten Programm angezeigt werden, sofern man activeX-Komponenten auf dem Client zugelassen hat.
bei mir gibts da keinen unterschied
Auf wieviel unterschiedlich eingerichteten Systemen hast Du das getestet?
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hi Tom,
bei mir gibts da keinen unterschied
Auf wieviel unterschiedlich eingerichteten Systemen hast Du das getestet?
Nur XP/FF 1.0.7. Aber wo ist das anders?
Wenn da steht "content-disposition: attachment", dann heißt das doch wohl, dass es ein Anhang ist und entsprechend zu behandeln ist.
Gruß, Marian
Hello,
Auf wieviel unterschiedlich eingerichteten Systemen hast Du das getestet?
Nur XP/FF 1.0.7. Aber wo ist das anders?
Wenn da steht "content-disposition: attachment", dann heißt das doch wohl, dass es ein Anhang ist und entsprechend zu behandeln ist.
... und ggf. mit dem assoziierten Programm geöffnet wird, wenn denn activeX gestattet ist.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hi Tom,
Wenn da steht "content-disposition: attachment", dann heißt das doch wohl, dass es ein Anhang ist und entsprechend zu behandeln ist.
... und ggf. mit dem assoziierten Programm geöffnet wird, wenn denn activeX gestattet ist.
Der einzige Browser (oder wie man das Ding auch immer nennen will), der ActiveX unterstützt, ist AFAIK der IE. Und auch da wird mir der Öffnen-oder-Speichern-Dialog angezeigt.
Gruß, Marian
Mojn,
Der einzige Browser (oder wie man das Ding auch immer nennen will), der ActiveX unterstützt, ist AFAIK der IE. Und auch da wird mir der Öffnen-oder-Speichern-Dialog angezeigt.
Das sollte erreicht werden oder nicht?
TomIRL
Hi TomIRL,
Der einzige Browser (oder wie man das Ding auch immer nennen will), der ActiveX unterstützt, ist AFAIK der IE. Und auch da wird mir der Öffnen-oder-Speichern-Dialog angezeigt.
Das sollte erreicht werden oder nicht?
Ja, aber es geht auch ohne application/x-octet-stream.
Gruß, Marian
Moin Marian
<?php
$file="senden.txt";
header('Content-type: application/x-octet-stream');
header("Content-disposition: attachment; filename=$file");
echo file_get_contents($file);
?>
Klappt leider bei mir in der Datei auch nicht..
Lösung:
Ich habe den code zum speichern unter in eine komplett eigen Datei gepackt..
geht..
Meiner und Deiner auch..
TomIRl
Hi TomIRL, (wer ist eigentlich Tom und wer TomIrl?)
Klappt leider bei mir in der Datei auch nicht..
Lösung:
Ich habe den code zum speichern unter in eine komplett eigen Datei gepackt..
geht..
Meiner und Deiner auch..
Wahrscheinlich hast du vor obigem Script schon was ausgegeben (echo etc oder zwischen ?> und <?php). Dann werden die Header automatisch schon gesendet, und header() bringt nix mehr. Mein Tipp: mit der Firefox-Extension Live-HTTP-Headers gucken, ob der content-disposition-header gesendet wurde.
Gruß, Marian
Hello,
Wie kann ich den korrekten Header an den Browser senden, so dass der Browser je nach Einstellung, den öffnen Dialog anbietet oder eben sofort speichert?
Weiß ich nicht.
Ich benutze immer einen richtig falschen Header (force download) und um das Ganze ggf. noch auf die Spitze zu treiben, den schmutzigen Trick mit der vorangetellten NULL. Da hat noch kein Browser bisher gezickt und noch kein Textprogramm versagt.
Die Vorangestellte NULL musst Du dann nachher im Textprogramm natürlich wieder löschen.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hello,
header('Content-type: application/x-octet-stream');
header('Content-disposition: attachment; filename=' . $file);
Hier würde ich auf jeden Fall auch basename($file) bemühen.
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom