OrangeEDE: problem mit php und htaccess

Hallo zusammen
ich hab in einen Ordner Bilder der mit htaccess geschützt ist
in dem ordner sind wieder einzelne ordner mit bildern

hab jetzt ein script das alle bilder der einzelnen unter ordner anzeigt

problem ist jetzt nur wie kann ich die bilder anzeigen lassen kann ohne dass des login fenster erscheint?

hab schon gelesen dass ich serverseitig darauf zugreifen kann aber wie?

hoff ihr könnt mir helfen

  1. ich hab in einen Ordner Bilder der mit htaccess geschützt ist...

    problem ist jetzt nur wie kann ich die bilder anzeigen lassen kann ohne dass des login fenster erscheint?

    hab schon gelesen dass ich serverseitig darauf zugreifen kann aber wie?

    Du könntest/müßtest alle Bilder über ein script ausliefern. Du bindest mit scr="" nicht die Bilder ein, sondern ein script mit einem Parameter, welches das Bild identifiziert (scr="script.php?bild=bildname"). Das script müßte  dann den richtigen header senden und das Bild laden und hinterhersenden.

    Schau z.B. mal im manual bei http://de.php.net/manual/de/function.readfile.php.

    Das script müßte natürlich noch wissen, ob es das Bild ausliefern darf, irgendwann, irgendwo und irgendwie müßte sich der Besucher also als berechtig ausweisen.

    1. ich hab in einen Ordner Bilder der mit htaccess geschützt ist...

      problem ist jetzt nur wie kann ich die bilder anzeigen lassen kann ohne dass des login fenster erscheint?

      hab schon gelesen dass ich serverseitig darauf zugreifen kann aber wie?

      Du könntest/müßtest alle Bilder über ein script ausliefern. Du bindest mit scr="" nicht die Bilder ein, sondern ein script mit einem Parameter, welches das Bild identifiziert (scr="script.php?bild=bildname"). Das script müßte  dann den richtigen header senden und das Bild laden und hinterhersenden.

      Schau z.B. mal im manual bei http://de.php.net/manual/de/function.readfile.php.

      Das script müßte natürlich noch wissen, ob es das Bild ausliefern darf, irgendwann, irgendwo und irgendwie müßte sich der Besucher also als berechtig ausweisen.

      also ich brauch dann eine datei (sript.php) wo der header und des readfile drin steht und dann über get z.b. 001 übergeben (script.php?bild=001) dass er des bild 001.jpg (   $GET_['bild']   ) nimmt und des dann in des des readfile reinschreiben ? versteh ich dich da richtig?

      und wo tu ich dann die datei hin
      in den geschützten bereich oder außerhalb?

      1. also ich brauch dann eine datei (sript.php) wo der header und des readfile drin steht und dann über get z.b. 001 übergeben (script.php?bild=001) dass er des bild 001.jpg (   $GET_['bild']   ) nimmt und des dann in des des readfile reinschreiben ? versteh ich dich da richtig?

        Ja.

        und wo tu ich dann die datei hin
        in den geschützten bereich oder außerhalb?

        Außerhalb, sie muß ja erreichbar sein.

        Ich habe das vor ein paar Jahren mal für eine eigene phpBB-Lösung mit eng begrenztem Personenkreis gemacht. Der Code ist aber nicht up to date. Z.B. sollte man noch überprüfen, ob der über GET übergebene Bildname überhaupt existiert.

        ...  
        if ( $userdata['session_logged_in'] )  
        {  
        // Code, wenn ein Benutzer angemeldet ist  
          
        $bild = $_GET["b"];  
          
        header("Content-Type: image/jpeg");  
        header("Content-Disposition: attachment; filename=$bild");  
        readfile ("images/".$bild);  
        }  
        else  
        {  
        // Code, wenn kein Benutzer angemeldet ist  
        header("Content-Type: image/jpeg");  
        header("Content-Disposition: attachment; filename=$bild");  
        readfile ("images/verboten.jpg");  
        }  
        ?>
        

        Übrigens, mein Hoster berechnet den Traffic für die Bilder dann doppelt, vermutlich weil sie vom script 1x gelesen und 1x gesendet werden. Ich weiß nicht wie andere das halten und meinen Hoster habe ich noch nicht darauf angesprochen, ob das ein Fehler ist, da ich immer weit weg vom Limit bin.

        1. <?php
          echo "<img src='test.php?bild=001'>";
          ?>

          ________________________________________

          <?php
          $verzeichnis = "../bilder/mimoalmina/";
          $endung = ".jpg";

          header("content-type: image/jpeg");
          header("pragma: cache");
          $picName = $verzeichnis . $GET_['bild'] . $endung;
          if (file_exists($picName)) {
          readfile($picName);
          exit;
          }
          else {
          header("status: 404 Not Found");
          }
          ?>
          _____________________________________________________

          funktioniert so aber noch nicht
          ohne des get hats noch funktioniert aber jetzt mags nich mehr

          traffic hab ich eh keine begrenzung =)

          1. funktioniert so aber noch nicht
            ohne des get hats noch funktioniert aber jetzt mags nich mehr

            Ohne $GET_['bild'] hat es funktioniert? Du hattest statt dessen '001' direkt drin stehen?

            Was genau heißt es funktioniert nicht?
            Nimm mal die header-Angaben und das readflie raus. Was kommt dann für eine php-Fehlermeldung? Was wird ausgegeben wenn Du
            var_dump($GET_['bild']);
            einfügst?

            1. also wenn ich die seite mit dem src auf machen kommt das symbol für ein kaputtes foto

              bei der anderen steht die adresse im bildschirm

              wenn ich des rauslösch und des andere einfüg kommt nurn weißer bildschirm

              Ohne des get gehts also wenn ich direkt ansprech ohne die variable

              1. also wenn ich die seite mit dem src auf machen kommt das symbol für ein kaputtes foto

                Logisch, da kommt irgendwas von dem behauptet wird es wäre ein Bild, ist es aber nicht.

                bei der anderen steht die adresse im bildschirm

                Du meinst wenn Du das script (test.php?bild=001) direkt aufrufst? Was für eine Adresse?

                wenn ich des rauslösch und des andere einfüg kommt nurn weißer bildschirm

                Hast Du das php error_reporting an? Wenn nicht, dann mach es an.

                Ohne des get gehts also wenn ich direkt ansprech ohne die variable

                Dann kommt aus $GET_['bild'] offenbar nicht 001 raus. Deshalb hatte ich dich gebeten Dir das mit var_dump() ausgeben zu lassen. Da darf keine weiße Seite kommen, selbst wenn $GET_['bild'] leer ist.

          2. Hello,

            <?php
            echo "<img src='test.php?bild=001'>";
            ?>

            ________________________________________

            <?php
            $verzeichnis = "../bilder/mimoalmina/";
            $endung = ".jpg";

            header("content-type: image/jpeg");
            header("pragma: cache");

            $picName = $verzeichnis . intval($_GET['bild']) . $endung;

            if (file_exists($picName))

            {

            readfile($picName);
                exit;
            }
            else

            {

            header("status: 404 Not Found");
            }
            ?>
            _____________________________________________________

            funktioniert so aber noch nicht

            Konnte auch nicht, weil Du $GET_ anstelle von $_GET geschrieben hattest.
            Außerdem empfehle ich dringend, die Nummer des Bildes auch als solche zu behandeln, damit Du dir keine Sicherheitslücke einbaust in das Script.

            Haben die Bilder keine Präfixe mehr vor ihrem '001' usw?
            Also z.B. 'pic001.jpg'?

            Wenn Du '001' anstelle von '1' benötigst, müsstest Du dir den String entsprechend links auffüllen mit den führenden Nullen.

            Z.B.     $bild = substr('000' . intval($_GET['bild']),-3);

            Die Abfrage auf file_exists() ist zwar ganz nett, aber eigentlich nur gültig, wenn der Bestand an Bildern sich während der Laufzeit des Scriptes nicht verändert. Das nur der Vollständigkeit halber.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. Hello,

              Kleine Ergänzung noch:

              Die Header für das Bild gehören natürlich auch in den True-Zweig des If und nicht davor!

              <?php
              $verzeichnis = "../bilder/mimoalmina/";
              $endung = ".jpg";

              $picName = $verzeichnis . intval($_GET['bild']) . $endung;

              if (file_exists($picName))
                {

              header("content-type: image/jpeg");
                      header("pragma: cache");

              readfile($picName);
                  exit;
              }
              else
                {
                  header("status: 404 Not Found");
              }
              ?>

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
        2. Hallo,

          readfile ("images/".$bild);
          Übrigens, mein Hoster berechnet den Traffic für die Bilder dann doppelt

          das wäre aber schon sehr frech; falls das wirklich der Fall ist, würde ich mich darüber beschweren.

          vermutlich weil sie vom script 1x gelesen und 1x gesendet werden.

          Das ist aber Unfug. Normalerweise kannst du mit einem PHP-Script Daten lesen und schreiben, wie du lustig bist, mit dem "Traffic" hat das nichts zu tun. Darunter versteht man normalerweise nur das Datenvolumen, das dein Server (oder dein Virtual Host) über die Netzwerkschnittstelle mit seiner Umgebung austauscht.

          Oder hast du im Script die Daten als HTTP-Ressource gelesen, vielleicht sogar von einem fremden Host, anstatt als Datei? Dann wäre es verständlich, dass das als Netzwerktraffic berechnet wird.

          So long,
           Martin

          --
          Wer barfuß geht, dem kann man nicht die Schuld in die Schuhe schieben.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Oder hast du im Script die Daten als HTTP-Ressource gelesen, vielleicht sogar von einem fremden Host, anstatt als Datei?

            Nein. Vielleicht ist es auch schon nicht mehr so, das war mir so 2005/2006 aufgefallen.