TomIRL: File an Browser senden

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

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

    1. oops, ich mein natürlich

        
      header('Content-type: text/plain');  
      
      

      wie kommst du auf application/x-octet-stream?

      Gruß, Marian

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

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. 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

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

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. 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

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

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. 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

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

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                    1. 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

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

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

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

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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  3. 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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau