Maximus: .exe an header senden

Hallo,

ich habe ein PHP-Script, was mir eine Datei aus einem geschützen Ordner an den User weiterleitet.

Beispiel:
Man gibt ein:
http://<DOMAIN>/download.php?file=game1.exe

Das Script geht dann in das Verzeichnis /download/games/ dann machte es einen Header Content-Type mit application/octet-stream. Dann wird die Datei ausgegeben.

Das Problem ist, dass dann bei "Speichern unter" nicht die Datei "game1.exe" sondern "download.php" steht. Wenn ich die Datei herunterlade und sie umbennene in game1.exe klappt das Game.

Wie kann ich dem Header sagen, dass es die Datei Game1.exe zum Download anzeigen soll und nicht die download.php? Es ist ja nur der Name und die Endung falsch. Die Datei, die gedownloaded wird ist ja die richtige.

Zum Test:

http://www.example.net/test.php?file=java.exe

Gruß
Maximus

  1. Hi,

    Das Problem ist, dass dann bei "Speichern unter" nicht die Datei "game1.exe" sondern "download.php" steht. Wenn ich die Datei herunterlade und sie umbennene in game1.exe klappt das Game.

    versuch's mal mit dem Content-Disposition-Header, der ist nämlich genau für solche Zwecke vorgesehen:

      
    header('Content-Disposition: attachment; filename="game1.exe"')  
    
    

    Viele Grüße
     Benjamin

    --
    Der nächste Satz ist gelogen.
    Der vorherige Satz ist wahr.
    1. Hi,

      versuch's mal mit dem Content-Disposition-Header, der ist nämlich genau für solche Zwecke vorgesehen:

      vielleicht noch diese kleine Ergänzung: Content-Disposition gehört nicht offiziell zum HTTP-Standard, sondern wurde einfach nur von einigen Clients aus einem anderen Zusammenhang übernommen (in HTTP dürfen neue Header frei "erfunden" werden).

      Das bedeutet, dass das gewünschte Verhalten unter Umständen nicht in jedem Browser implementiert wurde. Inwieweit welche Software das unterstützt, weiß ich nicht und konnte ich auch in der Kürze der Zeit nicht herausfinden. Die zurzeit gängigsten Browser gehören aber – soweit ich weiß – dazu. Da aber unbekannte Header ignoriert werden müssen, ist das Schlimmste, das dir passieren kann, sowieso nur, dass weiterhin eine download.php zum Download angeboten wird.

      Viele Grüße
       Benjamin

      --
      Der nächste Satz ist gelogen.
      Der vorherige Satz ist wahr.
      1. Hallo Benjamin,

        versuch's mal mit dem Content-Disposition-Header, der ist nämlich genau für solche Zwecke vorgesehen:

        vielleicht noch diese kleine Ergänzung: Content-Disposition gehört nicht offiziell zum HTTP-Standard, sondern wurde einfach nur von einigen Clients aus einem anderen Zusammenhang übernommen (in HTTP dürfen neue Header frei "erfunden" werden).

        Huh? Du verlinkst auf eine Stelle im HTTP-Standard und behauptest, der Header wäre nicht offiziell darin enthalten? Was denn nun? Ok, in HTTP/1.0 ist's nicht enthalten, aber in HTTP/1.1 ja offensichtlich schon, Du verlinkst den ja selbst.

        Viele Grüße,
        Christian

        --
        "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
        1. Hi,

          Huh? Du verlinkst auf eine Stelle im HTTP-Standard und behauptest, der Header wäre nicht offiziell darin enthalten? Was denn nun? Ok, in HTTP/1.0 ist's nicht enthalten, aber in HTTP/1.1 ja offensichtlich schon, Du verlinkst den ja selbst.

          ja, ich habe mich selbst gewundert, aber folgendes kann man doch eigentlich nicht falsch verstehen, oder?

          "See section 15.5 for Content-Disposition security issues."

          Dort heißt es weiter: "Content-Disposition is not part of the HTTP standard, but since it is widely implemented, we are documenting its use and risks for implementors."

          Viele Grüße
           Benjamin

          --
          Der nächste Satz ist gelogen.
          Der vorherige Satz ist wahr.