progamer: Bild vom Server an den Client senden

Hallo!

Ich programmiere eine webanwendung und es geht darum, dass ich das Profilfoto vom User x anzeigeb möchte.

Es gibt ja die Möglichkeit, per Url  das Image anzuzeigen. Ich möchte aber nicht, dass die Bilder per Url erreichbar sein sollen.
Da habe ich doch die Möglichkeit mit php die binârdaten zu lesen und an den Client zu senden.
Aber wie genau mache ich das?
Mit fread sehe ich die binärzeichenkette aber muss nicht zusaetzlich ein header angegeben werden?

Danke :-)

  1. Mahlzeit,

    du suchst nach paththru();
    Dann noch den passenden Header vornweg und das Bild wird angezeigt.

    --
    42
    1. du suchst nach paththru();
      Dann noch den passenden Header vornweg und das Bild wird angezeigt.

      [ ] Du hast seine Frage verstanden, insbesondere den Teil mit "Ich möchte aber nicht, dass die Bilder per Url erreichbar sein sollen."

      1. Mahlzeit,

        [ ] Du hast seine Frage verstanden, insbesondere den Teil mit "Ich möchte aber nicht, dass die Bilder per Url erreichbar sein sollen."

        Ach auch keine URL wie bild.php?bild=123 ?
        Ja, dann hast du recht, dann geht meine Lösung nicht. Wenn eine solche URL aber erlaubt ist (ohne URL ist eine Bildanzeige nicht möglich), hast du einfach nur keine Ahnung wovon ich rede.

        Oder wie liest du ein Bild von der Platte und schickst es an den Browser? Lässt du deinen Bruder Bytes schaufeln?

        --
        42
  2. Es gibt ja die Möglichkeit, per Url das Image anzuzeigen. Ich möchte aber nicht, dass die Bilder per Url erreichbar sein sollen.

    Bilder lassen sich als data:-URL direkt im src-Attribut des <img>-Elements angeben. Das sieht nur leider ungefähr so doof aus wie ein Hund mit eingeklemmtem Schwanz.

    Ich habe allerdings den Eindruck, dass du nicht so wirklich weisst, womit du da arbeitest. Vielleicht erklärst du erstmal, warum du partout nicht willst, dass Bilder per URL abrufbar sind.

  3. Mit fread sehe ich die binärzeichenkette aber muss nicht zusaetzlich ein header angegeben werden?

    Bei readfile steht einiges in der Doku.

  4. Tach!

    Ich programmiere eine webanwendung und es geht darum, dass ich das Profilfoto vom User x anzeigeb möchte.
    Es gibt ja die Möglichkeit, per Url  das Image anzuzeigen. Ich möchte aber nicht, dass die Bilder per Url erreichbar sein sollen.
    Da habe ich doch die Möglichkeit mit php die binârdaten zu lesen und an den Client zu senden.

    Das Ergebnis ist so ziemlich dasselbe. Ob du ein Durchreich-Script oder eine direkt vom Server bediente URL nimmst, in beiden Fällen kommen die Bild-Daten beim Client an, der dazu eine URL aufrufen musste. Mit Script hast du aber noch ein paar Prüfmöglichkeiten.

    Aber wie genau mache ich das?
    Mit fread sehe ich die binärzeichenkette aber muss nicht zusaetzlich ein header angegeben werden?

    readfile() wurde schon genannt. Und wenn du Zeugs auslieferst, musst du dich auch um den passenden Content-Type-Header kümmern, je nach Grafikformat.

    dedlfix.

  5. Kurz: geht nicht.
    Anders als mit URL kann man keine Webresource aufrufen.

    Wenn du verhindern willst dass dein Bild irgendwo sonst eingebunden wird, kannst du es mit dem Referrer versuchen. Oder du generierst eine URL die zeitabhängig ist oder so irgendwas und sorgst dann dafür dass nur dann ein Bild zurückgegeben wird wenn eine URL aufgerufen wurde, die zur einer "vor kurzem erst" generierten Webseite passt.

  6. Hmm, müsste es denn nicht gehen, wenn ich die Binärzeichenkette an den Browser sende? Dieser müsste doch die Binärzeichenkette interpretieren können und folglich das Bild darstellen?

    1. Tach!

      Hmm, müsste es denn nicht gehen, wenn ich die Binärzeichenkette an den Browser sende? Dieser müsste doch die Binärzeichenkette interpretieren können und folglich das Bild darstellen?

      Ja, mit dem passenden Content-Type-Header. Ansonsten weiß der Browser nicht, wie er die Byte-Suppe zu interpretieren hat. Aber einfach nur ein Script schreiben, das 1:1 durchreicht, hat wie schon gesagt keinen Vorteil gegenüber einem Direktausliefern.

      dedlfix.

    2. Mahlzeit,

      Hmm, müsste es denn nicht gehen, wenn ich die Binärzeichenkette an den Browser sende? Dieser müsste doch die Binärzeichenkette interpretieren können und folglich das Bild darstellen?

      Ja, das macht der Browser immer, wenn er ein Bild darstellen soll.

      --
      42
    3. Ich glaube hier gibts ein Verständnisproblem.
      Du sendest nicht einfach so mal ein Bild an irgendeinen Browser.
      Der Browser holt sich das Bild, er muss danach fragen und bekommt es dann als Antwort. Diese Frage passiert über eine URL, anders geht das nicht.

      Erzähl doch einfach mal was du vor hast.

  7. Es gibt ja die Möglichkeit, per Url  das Image anzuzeigen. Ich möchte aber nicht, dass die Bilder per Url erreichbar sein sollen.

    Meinst Du, daß sie nur nicht für jeden über url erreichbar sein soll (für alle oder nur bestimmte angemeldete Nutzer aber schon), oder überhaupt nicht?

  8. Sorry diesmal verstehe ich eure ganzen Posts nicht.
    Es gibt doch die Möglichkeit Bilder ohne eigene URL in einen Code einzubinden: Data-Url. So wie ich das verstehe hat das Bild dann keine eigene URL (natürlich nur sofern es in einem öffentlich nicht zugänglichen Ordner liegt). Das führt zwar zu besagten Nachteilen, dies muss "progamer" aber selbst entscheiden.

    Wie man im php eine base64 Datei ausliefert wird dir hier erklärt. Ich hab das selbst noch nie gemacht und hab einfach mal für dich gegoogelt :). Grob überflogen sieht das aber ganz brauchbar aus.

    Hoffe das ist es wonach du gesucht hast.

    Gruß
    progammler
    T-Rex