Peter: Datei zurückgeben

Hallo,

Ich will mit einem Skript keine ausgabe zurückgeben aber eine Datei die dann also sozusagen zum download angeboten wird, ist das möglich mit php ?
Reicht es irgendwie die Header zu modifizieren ? Kann man den Namen der Datei dann frei wählen ?
Kennt jemand einen guten Link für ein tutorial vielleicht ?

Gruss
 Peter

  1. Hallo Peter,

    Ich will mit einem Skript keine ausgabe zurückgeben aber eine Datei die dann also sozusagen zum download angeboten wird, ist das möglich mit php ?

    das ist kein Problem. Denn ob PHP nun HTML-Code oder irgendwas anderes an den Browser sendet, ist vollkommen belanglos.

    Reicht es irgendwie die Header zu modifizieren ?

    Das ist die eine Sache: Die richtigen Header. Der wichtigste ist
     Content-Type: application/octet-stream
    dann wird ein anständiger Browser schonmal nicht mehr versuchen, die Datei direkt anzuzeigen (der IE eventuell doch noch, denn er versucht gern, anhand der Nutzdaten den Datentyp zu erraten und "passend" zu verarbeiten).

    Kann man den Namen der Datei dann frei wählen ?

    Ja. Wenn man nichts weiter unternimmt, gibt es noch einen unschönen Effekt mit dem Namen, den der Browser zum Speichern vorschlägt - das ist nämlich einfach der Name des Scripts. Um einen vernünftigen Dateinamen zu übergeben, sendest du noch den Header
     Content-Disposition: attachment; filename=blubb.bla
    So sollte es mit den meisten Browsern funktionieren. Jetzt müssen nur noch die Nutzdaten folgen - das erledigst du am besten mit der PHP-Funktion readfile().

    Schönen Abend noch,
     Martin

    PS: Du plenkst.

    --
    Auf jeden Menschen auf der ganzen Welt entfallen statistisch gesehen etwa 3000 Spinnen, wie Wissenschaftler jetzt festgestellt haben.
    Wer will meine haben? Denn ich will sie bstimmt nicht.
    1. Hallo,

      schon erstaunlich! Da passiert ´ne Stunde lang gar nichts und dann beide in derselben Minute :O)

      Viele Grüße

  2. Hallo Peter

    Ja das geht mit PHP indem man ein Header Kommando an den Browser sendet, für eine Excel Datei zum Beispiel so:

    header("Content-Type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=einedatei.xls");
    header("Pragma: no-cache");
    header("Expires: 0");

    Danach kann man mittels echo die Inhalte der Datei ausgeben.

    Der Name der Datei kann frei gewählt werden. Es muss einfach der korrekte Content-Type mitgegeben werden je nach gewünschtem Dateityp. Der Browser bietet die Datei dann zum Download an, wenn er sie nicht darstellen kann. Zum Beipiel eine PDF Datei wird, wenn der Benutzer Acrobat installiert hat, im Browser direkt angezeigt.

    Schöner Gruss,
    Carole.

    1. Hallo Carole,

      im Prinzip ist das ja alles richtig, was du schreibst. Nur ...

      header("Content-Type: application/vnd.ms-excel");

      ... wenn du den Content-Type angibst, der tatsächlich zur Datei "gehört", dann führt das oft dazu, dass der Browser direkt versucht, die Datei anzuzeigen (evtl. über ein entsprechendes Plugin). Wenn ich Peter richtig verstanden habe, möchte er aber nur, dass die Datei zum Speichern angeboten wird. Deshalb habe ich den "neutralen" Content-Type: application/octet-stream empfohlen, der keine Information über den Dateiinhalt gibt.

      header("Pragma: no-cache");
      header("Expires: 0");

      Naja, das wäre auch nicht unbedingt nötig, schadet aber auch nicht.

      Danach kann man mittels echo die Inhalte der Datei ausgeben.

      Das ist bei einer beliebigen Datei, deren Inhalt nicht textorientiert ist, gefährlich. Besser ist da readfile(), denn damit wird der gesamte Dateiinhalt exakt 1:1 übertragen, ohne dass irgendwas daran interpretiert oder umgewandelt wird (z.B. Zeilenumbrüche).

      Zum Beipiel eine PDF Datei wird, wenn der Benutzer Acrobat installiert hat, im Browser direkt angezeigt.

      Ja, dieses Verhalten mag ich als Benutzer aber überhaupt nicht. Lieber lasse ich den PDF-Reader als separates Programm starten.

      Schönen Abend noch,
       Martin

      --
      F: Was ist schneller: Das Licht oder der Schall?
      A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.
  3. Lieber Peter,

    Du suchst "Download erzwingen" im Forums-Archiv.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.