wo2001: link -> download

hi,
die frage gibt es öfter, ich weiß:
habe auch nach dem thema gesucht, aber leider den entsprechenden beitrag nicht gefunden.

aaalso.
man möchte ja manchmal, dass der user, wenn er auf einen link zu einem pdf/word-doc/bild usw klickt, dass er nicht das dings angezeigt bekommt, sondern es downgeloadet wird.
das geht irgendwie so:
mit einem cgi teilt man dem ding auf dem server einen mime-type zu, der immer gedownloaded wird und nicht angezeigt.
kann mir da jemand einen tip geben, wo ich so ein script finde, oder infos, wie sowas geht?
vielen dank im voraus :)

  1. Hi,

    mit einem cgi teilt man dem ding auf dem server einen mime-type zu,

    nämlich application/octet-stream.

    der immer gedownloaded wird und nicht angezeigt.

    Was hat der Transport einer Ressource zwischen einem entfernten und dem lokalen Rechner mit der Anzeige zu tun? Oder verwechselst Du den Begriff "Download" mit dem "speichern unter"-Dialog? Nun, Du hast gerade einen Download meiner Antwort durchgeführt.

    wo ich so ein script finde,

    Selbst ist der User.

    oder infos, wie sowas geht?

    Der HTTP-Header heißt "Content-type", Wert siehe oben. Welche Infos brauchst Du noch? Ach ja: Teste mit einem HTTP-tauglichen Client, also z.B. mit einem Browser, der _nicht_ IE heißt. Dieser verhält sich mit an Sicherheit grenzender Wahrscheinlichkeit falsch, aber da kannst Du (außer Bug-Reports an Microsoft zu schicken) nichts gegen tun.

    Cheatah

    1. Hi,

      mit einem cgi teilt man dem ding auf dem server einen mime-type zu,

      nämlich application/octet-stream.

      Was hat der Transport einer Ressource zwischen einem entfernten und dem lokalen Rechner mit der Anzeige zu tun? Oder verwechselst Du den Begriff "Download" mit dem "speichern unter"-Dialog? Nun, Du hast gerade einen Download meiner Antwort durchgeführt.

      argh, ich meinte natürlich das speichern beim client, bzw den dialog, sorry der ungenauen formulierung.

      Selbst ist der User.

      ach nun sei doch nicht so gemein ,schnüff. wenn ich eines finden würde, würde ich ja nicht danach fragen.

      Der HTTP-Header heißt "Content-type", Wert siehe oben. Welche Infos brauchst Du noch? Ach ja: Teste mit einem HTTP-tauglichen Client, also z.B. mit einem Browser, der _nicht_ IE heißt. Dieser verhält sich mit an Sicherheit grenzender Wahrscheinlichkeit falsch, aber da kannst Du (außer Bug-Reports an Microsoft zu schicken) nichts gegen tun.

      what?
      du liegst jetzt bestimmt unter den tisch, aber ich möchte ja nicht das, was auf der seite steht, der ich den header zuordne, von user gespeichert haben, sondern zb ein bild.
      und ein bild mit einem http-header versehen, das geht doch net, oder doch?
      also wenn ichs mit php in den header schreibe, wird das bild ganz nomal angezeigt.
      wäre lieb , wenn du es geauer erklären könntest... bitte? *ganz lieb guckt*

      1. du liegst jetzt bestimmt unter den tisch, aber ich möchte ja nicht das, was auf der seite steht, der ich den header zuordne, von user gespeichert haben, sondern zb ein bild.
        und ein bild mit einem http-header versehen, das geht doch net, oder doch?
        also wenn ichs mit php in den header schreibe, wird das bild ganz nomal angezeigt.

        Mir scheint, dass Du hier etwas ganz heftig wechverselst, HTTP-Header
        hat nix mit dem Head-Bereich in einer HTML-Datei o.ä. zu tun.

        HTTP Header Viewer: http://delorie.com/web/headers.html

        1. Mir scheint, dass Du hier etwas ganz heftig wechverselst, HTTP-Header
          hat nix mit dem Head-Bereich in einer HTML-Datei o.ä. zu tun.

          lol... nein, ganz so unbedarft bin ich nun auch wieder nicht.
          ich habe das hier (erfolglos) versucht.
          ich befürchte, auch ziemlich dämlich, aber ich dachte, vielleicht wird dann ein download-dialog für die seite angezeigt. wär ja schonmal was :)

          <? header ("Content-Type: application/octet-stream"); ?>
          ...rest der seite

          1. Hi,

            <? header ("Content-Type: application/octet-stream"); ?>

            wenn der HTTP-Header nicht bereits abgesendet wurde - was nach dem ersten ausgegebenen Zeichen der Fall ist, also z.B. einem Leerzeichen oder Zeilenumbruch - sollte diese Ressource vom Client mit dem "speichern unter"-Dialog bedacht werden. Unabhängig davon, um was für eine Ressource es sich handelt, also ob z.B. das Script anschließend Grafikdaten ausgibt.

            Wie gesagt, einen HTTP-fähigen Client vorausgesetzt. Der IE scheidet aus.

            Cheatah

            1. hm.stimmt.
              aber..
              ich lade dann halt die php-datei down. nein, also ich speichere sie.
              und .gif kann ich sie auch nicht nennen, weil dann wird ja das php nicht ausgeführt.

              es geht gar nicht, was ich möchte, oder?
              den header einer grafik kann ich ja bestimmt nicht verändern.

              trotzdem dank für die hilfe :)

              ....

              1. Hi,

                und .gif kann ich sie auch nicht nennen, weil dann wird ja das php nicht ausgeführt.

                das ist ganz allein Sache Deiner Server-Konfiguration. Diese sollte so gestaltet sein, daß der Mensch (und _nur_ der) an der "Dateiendung" erkennt, um was es sich handelt - also z.B. .html, wenn HTML-Daten kommen. Wie diese generiert werden, interessiert ihn einen feuchten Kehricht.

                "Dateiendung" in Anführungszeichen, weil es sowas (mangels Dateien) in HTTP nicht gibt. Ausschließlich der Content-Type-Header sagt, um welche Art Ressource es sich handelt; der Client entscheidet dann anhand seiner Konfiguration, wie er mit dem Ressourcentyp umgeht.

                den header einer grafik kann ich ja bestimmt nicht verändern.

                Klaro doch. Erstens kann PHP auch Grafikdaten ausgeben, zweitens lassen sich Server konfigurieren.

                Cheatah