Klaus: application/force-download Problem mit Leerzeichen

Hallo,

ich möchte mit diesem Script einen Download erzwingen:

header("Content-Description: File Transfer
Content-Type: application/force-download
Content-Disposition: attachment;filename=$datei");
readfile($datei);

Allerdings erhalte ich bei Downloaden eine HTNML-Datei und keine Excel-Datei, die es ist. Der nAme der Datei enthält ein Leerzeichen, ich habe irgendwo gelesen, dass das ein problem sein könnte.
Wie kann ich dieses Problem beheben ?

Gruß
Klaus

  1. Hi,

    header("Content-Description: File Transfer
    Content-Type: application/force-download
    Content-Disposition: attachment;filename=$datei");

    was ist denn das für ein putzige Art, Header zu setzen?
    Damit hast du die Zeilenumbrüche des Systems, auf dem das Script editiert wurde, direkt im HTTP-Header. Auf einem unixoiden System also \n. Das ist aber im HTTP-Kontext falsch, hier müssen Zeilenumbrüche mit \r\n dargestellt werden.
    Am saubersten (auch der Übersichtlichkeit wegen) ist es wohl, die Header alle mit je einem eigenen Aufruf der Funktion header() zu setzen. Der header "Content-Description" ist übrigens sehr ungewöhnlich.

    Und der korrekte MIME-Typ ist application/octet-stream, auch wenn die meisten Clients ihnen unbekannte oder frei erfundene MIME-Typen (wie dein application/force-download) genauso behandeln, weil sie ja sowieso nicht wissen, was mit der Ressource anzufangen wäre.

    Allerdings erhalte ich bei Downloaden eine HTNML-Datei und keine Excel-Datei, die es ist.

    Klar: Deine Header werden wegen der falschen Zeilenumbrüche nicht erkannt, also ignoriert. Es bleibt beim Default-Typ, den PHP angibt: text/html.

    Der nAme der Datei enthält ein Leerzeichen, ich habe irgendwo gelesen, dass das ein problem sein könnte.

    Nicht, wenn man korrekt damit umgeht. Sonderzeichen, die in URLs nicht erlaubt sind (z.B. Leerzeichen) müssen natürlich entsprechend codiert werden.

    Wie kann ich dieses Problem beheben ?

    Plenken kann man sich abtrainieren. Kostet am Anfang etwas Mühe, lohnt sich aber.

    So long,
     Martin

    --
    Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.
  2. Hi,

    header("Content-Description: File Transfer
    Content-Type: application/force-download
    Content-Disposition: attachment;filename=$datei");
    readfile($datei);

    Allerdings erhalte ich bei Downloaden eine HTNML-Datei und keine Excel-Datei, die es ist. Der nAme der Datei enthält ein Leerzeichen, ich habe irgendwo gelesen, dass das ein problem sein könnte.
    Wie kann ich dieses Problem beheben ?

    PHP Manual zu header, [strg]+[f], "content-disposition"

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.