suse: Bild nur an "berechtigten" Aufrufer ausliefern

Hallo

Ich will einen Bildabruf per url nur an Leute erlauben, die dazu berechtigt sind.

Dazu hätte ich gedacht, setze ich nach einem login ein cookie.
Der Bildabruf läuft über ein script "getPic.php" mit BildID als Parameter.
Die Bilder liegen in einem Verzeichnis liegen, das nicht direkt vom aussens zugreifbar ist, z.B. durch .htaccess in der Form. Pic_BildID.jpg.

Wie kann ich denn in dem Script getPic.php nach Prüfung des cookies am einfachsten das Bild aus dem geschützten Verzeichnis ausliefern.

Hoffe, habe mein Problem vernünftig geschildert.
Suse

  1. Tach!

    Wie kann ich denn in dem Script getPic.php nach Prüfung des cookies am einfachsten das Bild aus dem geschützten Verzeichnis ausliefern.

    Mit readfile($dateiname). Vorher noch den passenden Content-Type-Header senden.

    dedlfix.

    1. Tach!

      Wie kann ich denn in dem Script getPic.php nach Prüfung des cookies am einfachsten das Bild aus dem geschützten Verzeichnis ausliefern.

      Mit readfile($dateiname). Vorher noch den passenden Content-Type-Header senden.

      Danke!

      und dann echo, oder? So in der art " echo readfile($filename);"
      Muss ich mich da um etwas kümmern, wenn die Bilddatei sehr gross ist, oder kümmert sich da php drum?.

      Gibt´s evtl. eine Möglichkeit zu redirecten und dem .htaccess zu sagen, dass wenn der request von dem script kommt, ausgliefert werden darf.

      Bekomme das leider nicht hin, oder habe ich da einen grundsätzlichen Denkfehler?

      Suse

      1. Hi,

        und dann echo, oder? So in der art " echo readfile($filename);"

        Nein, ohne echo. Bitte belese dich dazu, was die Funktion macht und was sie zurück gibt, im Handbuch.

        Muss ich mich da um etwas kümmern, wenn die Bilddatei sehr gross ist, oder kümmert sich da php drum?.

        Hinweise dazu findest du u.a. in den Nutzerkommentaren im Handbuch.

        Gibt´s evtl. eine Möglichkeit zu redirecten und dem .htaccess zu sagen, dass wenn der request von dem script kommt, ausgliefert werden darf.

        Der Request „kommt“ aber nicht vom Script.

        Was höchstens ginge wäre ein Script als RewriteMap, aber die ließe sich nur einrichten, wenn du volle Kontrolle über den Webserver hast.

        Allerdings könntest du auch per .htaccess beim Rewriten Cookie-Inhalte abfragen.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. und dann echo, oder? So in der art " echo readfile($filename);"

        Nein, readfile() sendet es direkt an den Ausgabepuffer.

        Muss ich mich da um etwas kümmern, wenn die Bilddatei sehr gross ist, oder kümmert sich da php drum?.

        Was soll dabei schiefgehen?

        Gibt´s evtl. eine Möglichkeit zu redirecten und dem .htaccess zu sagen, dass wenn der request von dem script kommt, ausgliefert werden darf.

        Der "innere" Request durch readfile() geht nicht über die mod_rewrite engine oder eine andere Weiterleitung der .htaccess.

        Du musst es selber, serverseitig in php, im script, dass im source des Bildes steht, prüfen. Einfacher wäre es, wenn der User eingeloggt ist, setze eine Session-Variable, wie $_SESSION["user_logged_in"] = TRUE;  und checke sie im Script. Ohne Cookies.

        Cheers,
        Baba

        1. Hallo,

          Gibt´s evtl. eine Möglichkeit zu redirecten und dem .htaccess zu sagen, dass wenn der request von dem script kommt, ausgliefert werden darf.
          Der "innere" Request durch readfile() ...

          es gibt keinen "inneren" Request, denn readfile() greift direkt auf die Datei zu.

          Ciao,
           Martin

          --
          Gültig sind Frauen ab 16, wohlgeformt ab 160 Pfund.
            (Gunnar Bittersmann)
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. es gibt keinen "inneren" Request, denn readfile() greift direkt auf die Datei zu.

            Ja, daher die quotes...

            Cheers,
            Baba

          2. es gibt keinen "inneren" Request, denn readfile() greift direkt auf die Datei zu.

            Naja... Genau genommen fragt PHP höflich beim Kernel des Betriebssystems nach ob es je nach Verfügbarkeit und Rechten als Antwort den Inhalt der Datei bekommen könnte.

            Und hieß "Request" nicht "Frage"? Und kann man das nicht als "inneren Request" bezeichnen?

            Jörg Reinholz

            1. Hallo,

              es gibt keinen "inneren" Request, denn readfile() greift direkt auf die Datei zu.
              Naja... Genau genommen fragt PHP höflich beim Kernel des Betriebssystems nach ob es je nach Verfügbarkeit und Rechten als Antwort den Inhalt der Datei bekommen könnte.

              ja, schon ...

              Und hieß "Request" nicht "Frage"?

              Eigentlich eher "Bitte" oder "Forderung".

              Und kann man das nicht als "inneren Request" bezeichnen?

              Ja, irgendwie schon. Nur wenn schon die Rede von HTTP und vom Webserver ist, dann meint man mit Request normalerweise einen HTTP-Request. Und der findet im dargestellten Beispiel nicht erneut statt.

              Ciao,
               Martin

              --
              Lehrer:  Wieviel ist die Hälfte von 8?
              Schüler: Kommt drauf an. Waagrecht 0 und senkrecht 3.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Tnx allen Helfern
    Suse