Do: CMS für img

Hi, ich hoffe es kann mir jemand weiterhelfen.
Ich versuche Bilder per php einzubinden, damit diese in einem geschützten Ordner liegen können. Was ich bisher habe funktioniert leider nicht.
<?php
$filename = '/folder/123.jpg';
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));

header('Last-Modified: '.gmdate('D, d M Y H:i:s', $timestamp).' GMT');
echo('data:image/jpeg;base64, '.base64_encode($contents));
fclose($handle);
?>

<img src="Link_zur_php.php" />

Vielen Dank im Voraus

  1. Hi,

    Was ich bisher habe funktioniert leider nicht.

    </hilfe/charta.htm#tipps-fuer-fragende>

    „Funzt nich“ ist keine brauchbare Problembeschreibung.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. Hi,

    echo('data:image/jpeg;base64, '.base64_encode($contents));

    Aus welchem Grund willst du die Daten denn Base64-kodiert an den Client schicken?

    Hast du den Client irgendwo darauf hingewiesen, *dass* du die Daten in dieser Kodierung schickst?

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  3. Moin!

    Hi, ich hoffe es kann mir jemand weiterhelfen.
    Ich versuche Bilder per php einzubinden, damit diese in einem geschützten Ordner liegen können. Was ich bisher habe funktioniert leider nicht.

    Naja...

      
    
    > <?php  
    > $filename = '/folder/123.jpg';  
      
    #  Prüfen, ob die Datei (nicht) existiert ...  
      if (! file_exists($filename)) {  
         header("HTTP/1.0 404 Not Found");  
         exit;  
      }  
      
      
    #  Prüfen, ob die Datei (nicht) lesbar ist ...  
      if (! is_readable($filename)) {  
         header("HTTP/1.0 403 Forbidden");  
         exit;  
      }  
      
    		  
    header('Last-Modified: '.date('r')); # Einfacher: Datum nach RFC2822  
      header('Content-Type: image/jpeg');  
      print file_get_contents($filename);  
    
    > ?>  
    
    

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    1. Hallo,

      header('Content-Type: image/jpeg');
        print file_get_contents($filename);

      hier würde ich eher readfile() empfehlen. Denn file_get_contents() liest zwangsläufig erst den kompletten Dateiinhalt und legt ihn temporär im Arbeitsspeicher ab, sofern das MEMORY_LIMIT ausreichend hoch ist. Ist die Datei größer als der für PHP zur Verfügung stehende Arbeitsspeicher, geht das schief. Okay, bei Bildern eher unwahrscheinlich, aber mal als grundsätzliche Überlegung.
      Dagegen ist readfile() nicht auf Zwischenspeichern angewiesen und *könnte* die Daten auch in kleinen Häppchen durchreichen und so auch Dateien von mehreren 100MB ausgeben. Ich weiß nicht, ob das so implementiert ist, würde das aber zumindest erwarten.

      So long,
       Martin

      --
      Der Stress von heute ist die gute alte Zeit von morgen.
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  4. Ich versuche Bilder per php einzubinden, damit diese in einem geschützten Ordner liegen können.

    Nur interessehalber, welchen Vorteil bringt das? Wer die URL zum Script hat, der kriegt auch das Bild.
    Und das Verzeichnis kannst du auf andere Art gegen Auslesen sperren.

    1. Moin!

      Wer die URL zum Script hat, der kriegt auch das Bild.

      Nicht zwingend. Er muss ja noch die Möglichkeit haben, ein bestimmtes Bild zu "bestellen".

      Ich selbst sehe darin aber auch keine Vorteile. Selbst das Sperren von Bildern lässt sich via PHP auch auf Dateisystem-Ebene vollziehen. (s. http://php.net/manual/de/function.chmod.php)

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix

  5. Hi, danke für euere Antwort.

    Das hat durchaus Sinn, dass ich die php verwenden möchte. Es geht darum, dass das Verzeichnis mit den Bildern nicht im öffentlichen Verzeichnis sondern gesondert liegt. Die php kann nun prüfen ob der Nutzer Rechte für den Zugriff auf die Daten hat. Nur bei erfolgreichem Login und den nötigen Zugriffsrechten öffnet er auch die Datei.

    Die Frage ist nur wie es genau geht.

    Danke

    Lg

    Hi, ich hoffe es kann mir jemand weiterhelfen.
    Ich versuche Bilder per php einzubinden, damit diese in einem geschützten Ordner liegen können. Was ich bisher habe funktioniert leider nicht.
    <?php
    $filename = '/folder/123.jpg';
    $handle = fopen($filename, "r");
    $contents = fread($handle, filesize($filename));

    header('Last-Modified: '.gmdate('D, d M Y H:i:s', $timestamp).' GMT');
    echo('data:image/jpeg;base64, '.base64_encode($contents));
    fclose($handle);
    ?>

    <img src="Link_zur_php.php" />

    Vielen Dank im Voraus

    1. Lieber Do,

      1.) Bitte kein TOFU! Danke.
      2.) Welche technischen Hinweise hast Du bereits umgesetzt und mit welchem Ergebnis?

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Ich bin noch nicht viel weiter gekommen.
        Ich verstehe nur leider nicht, warum es nicht funktioniert.
        Wenn ich die Ausgabe der php in die src einbinde, wird mir das Bild sofort korekt angezeigt. Aber sobald ich das Skript verlinke ist es wieder vorbei.
        Lg

        1. Lieber Do,

          Ich bin noch nicht viel weiter gekommen.

          dann wirst Du nicht umhin kommen, die Hintergedanken der Dir bereits gegebenen Tipps zu ergründen und die damit verbundenen Grundlagen zu erlernen, damit Du endlich weißt, was Du tust. Mir Raterei alleine kommst Du nicht weiter.

          Sowie man hier sieht, dass Du in Deinem Verständnis weitergekommen bist, kann man Dir wiederum auf Folgefragen aufbauend weiterhelfen.

          Liebe Grüße,

          Felix Riesterer.

          --
          ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
          1. Es ist ja schön mit anzusehen, auf welch hohem Ross hier manch einer sitzt.
            Fakt ist jedoch, dass auch in diesem Forum nicht jeder omniscient ist, jedoch viele es meinen zu sein.
            Wenn ihr bei uns in die Klinik kommt, sagen die Ärzte auch nicht: lernt die medizinischen Grundlagen, und wenn ihr die mal verstanden habt, dann können wir weitersehen, was wir für euch tun können.

            Naja, ich kann die Attitüde mancher Menschen einfach nicht nachvollziehen.

            J'espère qu'arrivrais à comprendre un jour
            But be that as it may.

            1. Lieber Do,

              Es ist ja schön mit anzusehen, auf welch hohem Ross hier manch einer sitzt.

              was regst Du Dich so auf? Ich habe nur festgestellt, dass Du mit den Dir bereits gegebenen Antworten offensichtlich noch nichts angefangen hast. Du hast dann selbst bestätigt, dass das aus Verständnisgründen tatsächlich so ist. Dass Du dann aber schon wieder nachfragst, fand ich verfrüht. Hier wird erwartet, dass man sich mit den Hinweisen auch beschäftigt, denn sie wurden deshalb gegeben, da sie offensichtlich zielführend sind.

              Fakt ist jedoch, dass auch in diesem Forum nicht jeder omniscient ist,

              Hier wird Hilfe zur Selbsthilfe gegeben. Das setzt natürlich voraus, dass man Willens ist, etwas dazuzulernen. Allwissenheit behauptet niemand und verlangt auch niemand.

              Wenn ihr bei uns in die Klinik kommt, sagen die Ärzte auch nicht: lernt die medizinischen Grundlagen, und wenn ihr die mal verstanden habt, dann können wir weitersehen, was wir für euch tun können.

              In die Klinik gehe ich auch nicht, um mir kostenlosen(!) Rat zur Selbsthilfe(!) geben zu lassen. Dein Beispiel hat einen gehörigen Gehfehler.

              Naja, ich kann die Attitüde mancher Menschen einfach nicht nachvollziehen.

              Da bist Du nicht alleine. Aber die Charta hast Du gelesen? Auch den Hinweis, dass das hier der Ton gerne bis hin zu unterkühlt-nüchtern ist, der von Neuligen gerne als arrogant missverstanden wird?

              J'espère qu'arrivrais à comprendre un jour
              But be that as it may.

              Schon klar...

              Liebe Grüße,

              Felix Riesterer.

              --
              ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    2. Ad ceterum:

      Ich habe die Lösung nun selbst gefunden. Ich hoffe, dass die Veröffentlichung auf diesem Forum anderen Leuten weiterhilft und diese sich dann nicht mit den selben "Problemen" herumschlagen müssen, wie es mir ergangen ist.

      //Skript.php
      <?php
      readfile($filePathName);
      ?>

      //HTML
      <img src="Skript.php" />

      1. Hallo,

        Ich habe die Lösung nun selbst gefunden.

        selbst? - Wenn du meinst. Du hättest nur die Antworten lesen müssen, die du bekommen hast.

        //Skript.php
        <?php
        readfile($filePathName);
        ?>

        Das ist im Grunde das, was fastix und ich dir schon vorgeschlagen haben, wobei mein Beitrag nur eine Verfeinerung im Detail darstellt.

        Was du hier zeigst, kann natürlich nur ein Ausschnitt aus dem Script sein, denn zwei wichtige Dinge fehlen noch: Der korrekte HTTP-Header für den Content-Type, und irgendeine Form der Fehlerbehandlung.

        //HTML
        <img src="Skript.php" />

        Und bitte das vorgeschriebene alt-Attribut nicht vergessen.

        So long,
         Martin

        --
        Es gibt Dinge, die sind sooo falsch, dass nicht einmal das Gegenteil stimmt.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Da hast du absolut Recht, Martin

          wie bereits erwähnt bedanke ich mich auch vielmals für die Antworten von Dir und fastix.

          Ich habe mich nur über die Kommentare von jemand anderem geärgert. Ich finde diese einfach unpassend.

          Ich denke, dass ich als Doppelstudent der Zahn- und Humanmedizin nicht der Allerdümmste bin und würde mich freuen, wenn ein bischen mehr Höflichkeit und Respekt an der Tagesordnung stünden.

          Wie gesagt, nochmals vielen Dank und einen schönen Tag euch Beiden.