Phil: Problem mit fopen!

0 92

Problem mit fopen!

Phil
  • php
  1. 0
    Wolke
    1. 0
      Phil
      1. 0
        Wolke
        1. 0
          Phil
          1. 0
            Christoph Schnauß
            1. 0
              Phil
              1. 0
                Christoph Schnauß
                1. 0
                  Phil
                  1. 0
                    Wolke
                    1. 0
                      Phil
                      1. 0
                        Wolke
                        1. 0
                          Phil
                          1. 0

                            Doppelposting

                            Christoph Schnauß
                            • menschelei
                          2. 0
                            Wolke
                            1. 0
                              Phil
                              1. 0

                                Kein Doppelposting

                                Wolke
                                1. 0
                                  Phil
                                  1. 0

                                    Provider austricksen

                                    Christoph Schnauß
                                  2. 0
                                    Wolke
                                    1. 0
                                      Phil
                                      1. 0
                                        Christoph Schnauß
                                      2. 0
                                        Wolke
                                        1. 0
                                          Phil
                                          1. 0

                                            weiter gehts

                                            Wolke
                                            1. 0
                                              Phil
                                              1. 0
                                                Wolke
                                                1. 0
                                                  Phil
                                                  1. 0
                                                    Wolke
                                                    1. 0
                                                      Phil
                                                      1. 0
                                                        Wolke
                                                        1. 0
                                                          Phil
                                                          1. 0
                                                            Wolke
                                                            1. 0
                                                              Phil
                                                              1. 0
                                                                Wolke
                                                            2. 0
                                                              dedlfix
                                                              1. 0
                                                                Wolke
                                                                1. 0
                                                                  Sven Rautenberg
                                                                  1. 0
                                                                    Wolke
                                                                    1. 2
                                                                      Sven Rautenberg
                                                                      1. 0
                                                                        Wolke
                                                                        1. 0
                                                                          Auge
                                                                          1. 0

                                                                            ### Brett vor'm Kopf ###

                                                                            Wolke
                                                                            1. 0
                                                                              Sven Rautenberg
                                                                              1. 0
                                                                                Wolke
                                                                                1. 0
                                                                                  Sven Rautenberg
                                                                                  1. 0
                                                                                    Wolke
                                                                                    1. 0
                                                                                      Sven Rautenberg
                                                                  2. 0
                                                                    Wilhelm Turtschan
                                                                2. 0
                                                                  dedlfix
                                                                  1. 0
                                                                    Wolke
                                                                    1. 2
                                                                      dedlfix
                                                                      1. 0
                                                                        Wolke
                                                                        1. 0
                                                                          Sven Rautenberg
                                                                          1. 0
                                                                            Wolke
                                                                            1. 0
                                                                              Sven Rautenberg
                                                                              1. 0
                                                                                Phil
                                                                                1. 1
                                                                                  dedlfix
                                                                                2. 2
                                                                                  Sven Rautenberg
                                                                              2. 0
                                                                                Wolke
                                                                        2. 0
                                                                          dedlfix
                                                        2. 1
                                                          dedlfix
                                                2. 2
                                                  Sven Rautenberg
                                            2. 0
                                              Christoph Schnauß
                                              1. 0

                                                Du irrst dich

                                                Wolke
                                          2. 0
                                            Tobias Kloth
                                        2. 0
                                          Tobias Kloth
                                    2. 0

                                      Doppelposting

                                      Christoph Schnauß
                                      • meinung
                                  3. 0
                                    Tobias Kloth
                                    1. 0
                                      Vinzenz Mai
                                    2. 0
                                      Phil
                              2. 0
                                Christoph Schnauß
                      2. 0
                        Christoph Schnauß
              2. 0
                Tobias Kloth
          2. 1
            Wolke
            1. 0
              Phil
              1. 1
                Wolke
            2. 1
              dedlfix
      2. 0
        Christoph Schnauß
    2. 0
      Christoph Schnauß
      1. 1
        Wolke
        1. 1
          dedlfix
  2. 0
    tom0201
    1. 0
      Phil
      1. 0
        tom0201
        1. 0
          Phil
          1. 1
            Christoph Schnauß
            1. 0
              Phil
        2. 0
          Christoph Schnauß
      2. 0
        Christoph Schnauß
        1. 0
          Phil
          1. 0
            Christoph Schnauß

Hi Leute

Sorry das ich euch nochmals um Rat fragen muss.

Ich habe ein Problem! Ich möchte eine eine Datei stream! Genauer gesagt ein Bild. Es ist mir wichtig das das ganze mit fopen gelöst wird!

Folgenden Code verwende ich:

<?php
$file = fopen("xxx.jpg","r");
echo $file; ?>

Jedoch erscheint danach nur: Resource id #1

Habe rausgefunden das man fread irgendwie verwenden muss. Wie schaffe ich es genau das ich mittels fopen ein Bild anzeigen kann?

Danke und Gruss

  1. Ich habe ein Problem! Ich möchte eine eine Datei stream! Genauer gesagt ein Bild. Es ist mir wichtig das das ganze mit fopen gelöst wird!

    Warum unbedingt fopen?

    Jedoch erscheint danach nur: Resource id #1

    Natürlich, du hast die Datei nur geöffnet, nicht gelesen.

    Habe rausgefunden das man fread irgendwie verwenden muss. Wie schaffe ich es genau das ich mittels fopen ein Bild anzeigen kann?

    <?
    $datei_handle = fopen("kirsche.jpg", "rb");
    $bild = fread($datei_handle, filesize("kirsche.jpg"));
    fclose ($datei_handle);
    print $bild;
    ?>

    Aber das ganze macht sehr wenig Sinn, es geht auch besser.
    Wenn Du mir sagst was du genau vorhast, sage ich Dir wie es geht.

    Wolke

    1. Hi

      Danke für die schnelle Antwort!

      Es geht darum, dass ich Bilder aus einem geschützten Ordner ( chmod 0 ) anzeigen möchte! Die Bilder dürfen einzeln nicht abegrufen werden können ( www.abc.de/1.jpg ) sondern nur, wenn sie über eine PHP Datei aufgerufen werden!

      Danke und Gruss aus der Schweiz

      1. Es geht darum, dass ich Bilder aus einem geschützten Ordner ( chmod 0 ) anzeigen möchte! Die Bilder dürfen einzeln nicht abegrufen werden können ( www.abc.de/1.jpg ) sondern nur, wenn sie über eine PHP Datei aufgerufen werden!

        Was willst du denn damit erreichen. Bilderklau verhindern ?
        Für den Browser ist es egal, ob du das Bild neu generierst
        oder nicht, speichern geht immer alles was man im Browser sieht.
        Du kannst es höchtens Bilderdieben schwieriger machen, aber
        nicht so, sondern andere Varianten:

        Bilderklau verhindern

        Danke und Gruss aus der Schweiz

        Gruss zurück, wo in der Schweiz ?
        Habe selber eine Weile in Zug und Arosa gewohnt.

        Wolke

        1. Abend Zusammen

          Richtig :-) Wieder mein altes Problem. Dafür dieses mal ohne "!" :-)

          Es geht mir eigentlich nicht um Bilderklau sondern eher darum das nicht jeder die Bilder ansehen kann.

          Ich glaube die jetztige Lösung ist nicht schlecht!

          Die Bilder sind in einem chmod 0 Ordner und werden jeweils über fopen in eine php Datei eingebunden. So kommt man ohne die php Datei ( welche ich Passwortschützen kann :D ) nicht an die Bilder ran!

          Der Code vorher war super. Bis auf kleines Detail. Es wird nicht das Bild selbst angezeigt sondern nur einen riesen Haufen Zahlen und Buchstaben.

          Wohne in der Nähe von Zürich. Arosa und Zug kenne ich gut, bin dort auch ab und zu unterwegs! Danke!

          1. hallo,

            dieses mal ohne "!" :-)

            Naja, sagen wir vorsichtig: mit reduzierten "!".

            Die Bilder sind in einem chmod 0 Ordner

            Was verstehst du unter "chmod 0"?

            und werden jeweils über fopen in eine php Datei eingebunden.

            Du möchtest dich bitte genauer mit fopen() beschäftigen.

            Der Code vorher war super. Bis auf kleines Detail. Es wird nicht das Bild selbst angezeigt sondern nur einen riesen Haufen Zahlen und Buchstaben.

            Also war der "Code vorher" eben nicht "super". Du scheinst noch nicht verstehen zu wollen, daß dein PHP letzten Endes nichts anderes zu tun hat, als an den Server gültigen HTML-Code zu übermitteln, damit der das dann an den anfragenden Browser weiterreichen kann. fopen() ist für das Einbinden von Grafiken in Webseiten ziemlich wenig geeignet.

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
            1. Abend

              Gebe mir alle Mühe mit den "!" :-)

              chmod 0 heisst für mich kein Write, kein execute und kein read für groups, public und owner. Also kein Zugriff.

              Nun, ich glaube du verstehst mich einfach falsch. Oder ich drücke mich falsch aus.

              Mit folgendem Code kann ich die Dateien aus dem gesperrten Ordner in ein php File einbinden, ohne das die Bilder direkt erreichbar sind. Mit dieser Lösung sind die Bilder nur mittels der php Datei ( die eine html Datei generiert ) aufrufbar. Genau das was ich gesucht habe. Die php Datei selbst kann ich noch Passwort schützen! Fertig ist der fast perfekte Schutz.

              <?php
              $filename = "./img/archiv/1/5.jpg";
              $user = "<img src="./img/archiv/1/5.jpg">";
              $fp = fopen ($filename, "r");
              fwrite ($fp, $user);
              echo $user;
              fclose ($fp);
              ?>

              1. hallo Phil,

                ich glaube du verstehst mich einfach falsch. Oder ich drücke mich falsch aus.

                Nimk mal vorsichtshalber das Zweite an.

                Mit folgendem Code kann ich die Dateien aus dem gesperrten Ordner in ein php File einbinden

                Nein, das kannst du nicht. Weil in ein PHP-Script überhaupt nichts eingebunden werden kann. Ein PHP-Script kann lediglich den zuständigen Interpreter veranlassen, noch andere Dateien zu befragen, ob sie entweder auszuführende Befehle enthalten oder als Sourcen an den Webserver zur Weitervermittlung an den anfragenden Client ausgeliefert werden sollen.

                Fertig ist der fast perfekte Schutz.

                Naja, _fast_.

                Grüße aus Berlin

                Christoph S.

                --
                Visitenkarte
                ss:| zu:) ls:& fo:) va:) sh:| rl:|
                1. Abend

                  Jo, ich nehme das zweite an. Scheint ja offensichtlich zu sein.

                  Nun ja, du hattest recht, die Bilder werden geöffnet, nur sobald man das Verzeichniss chmod 0 setzt, wars das!

                  Jedoch habe ich einen neuen Ansatz, ich könnte das vorherige Script dazu gebrauchen, Bilder ausserhab des htdocs Verzeichniss aufzurufen. Jedoch muss ich das erst noch testen. ICh möchte euch / dir auch nicht weiter auf die nerven gehen. Werde jetzt selbst mal ein wenig testen, ob ich was hinbringe, Ansätze und Hilfe habe ich ja genug bekommen, auch wenn ich noch nicht ganz alles verstehe.

                  Danke und Gruss aus Zürich.

                  1. Versteh ich nicht, warum muss denn der CHMOD geändert werden
                    oder warum willst du jetzt auuserhalb des Webverzeichnisses
                    experimentieren ?

                    Meine Lösung gibt dir doch alles, was Du möchtest oder
                    willst du noch was spezielles erreichen ?

                    1. Hey.

                      Ich versuche klar zu beschreiben was ich mir vorstelle!

                      Ich habe Bilder auf meinem Webserver. Diese können in ein php File ( <img> oder echo"img src=... ) oder direkt www.xxx.de/1.jpg angezeigt respektive aufgerufen werden!

                      Mein Ziel ist es jetzt, das das Bild nicht mehr direkt über www.xxx.de/1.jpg aufgerufen werden kann! Sondern das das Bild nur noch über die PHP Datei aufgerufen werden kann! Soll heissen, wenn man keinen Zugriff auf die php Datei hat, hat man keine Möglichkeit die Bilder anzuschauen!

                      Gruss Phil

                      1. Mein Ziel ist es jetzt, das das Bild nicht mehr direkt über www.xxx.de/1.jpg aufgerufen werden kann! Sondern das das Bild nur noch über die PHP Datei aufgerufen werden kann! Soll heissen, wenn man keinen Zugriff auf die php Datei hat, hat man keine Möglichkeit die Bilder anzuschauen!

                        Ja Phil, so habe ich es doch auch verstanden und mein Beispiel
                        ermöglicht dir das doch zu 100%.

                        Einziges was noch hinzukommt, ist ein htaccess datei in den Bilderordner zu legen, Fertig.

                        1. Hi,

                          Ja ich weiss :-) Nur, das RIESIGE Problem ist das mein Webserver ( Apache auf einem Network Gehäuse Sarotech NHD 350 ) kein htaccess unterstützt! Das ist eben das riesen Problem das ich habe! Gruss Phil

                          1. hallo Phil,

                            das RIESIGE Problem ist das mein Webserver ( Apache auf einem Network Gehäuse Sarotech NHD 350 ) kein htaccess unterstützt!

                            Doch, das tut er, du weißt bloß nicht, wie du es ihm beibringen sollst. Und genau das ist eigentlich der Grund, weshalb ich diesen ganzen Thread als "Doppelposting" betrachte.

                            Grüße aus Berlin

                            Christoph S.

                            --
                            Visitenkarte
                            ss:| zu:) ls:& fo:) va:) sh:| rl:|
                          2. Apache unterstützt bestimmt, aber dein Webspaceanbieter
                            wohl nicht, was ich höchst seltsam finde.

                            Aber in deinem Fall ist es auch egal, denn woher soll ein Besucher
                            bei dir wissen wie ein Bild heisst und wo es liegt, wenn du mein
                            Script benutzt. Er wird ja nie den richtigen Pfad erfahren.

                            Genau so gut müsste man ja alle Dateien wegsperren die relevanz
                            haben weil sie jemand nutzen könnte.

                            Oder kann man deine Ordner aufrufen und den Inhalt
                            als Indexdatei sehen? Das wäre natürlich was anderes.

                            1. Hi

                              Es ist nicht direkt ein Webspace anbieter. Ich besitze einen eigenen Apache Server, nur läuft dieser nicht auf einem PC sondern auf einem spezial Festplatten Gehäuse, welches auch über LAN & WAN angesprochen werden kann. htaccess wir leider nicht unterstützt von diesem Gehäuse. Grundsätzlich stimmt es das die Bilder Pfade nur sehr schwer herrauszufinden sind, nur möchte ich sicher gehen das die Bilder wirklich nicht aufgerufen werden können. Merke aber das dies wohl ohne htaccess kaum möglich sein wird!

                              Gruss Phil

                              1. Es ist nicht direkt ein Webspace anbieter. Ich besitze einen eigenen Apache Server, nur läuft dieser nicht auf einem PC sondern auf einem spezial Festplatten Gehäuse,

                                Interessant, was läuft denn darauf für ein Betriebssystem?
                                Und kannst Du mir einen Infolink zum Hersteller geben oder
                                ist das eine Eigenkonstruktion?

                                Zu deinem Problem, ja da hast du recht dann bleiben nur
                                2 Alternativen.

                                1. Den Namen des Bilderverzeichnisses dauernd zu ändern.
                                zb.
                                $actdirname = 'aktuelldir.dat';
                                $newname = md5(date('YmHis').irgendwas);
                                rename(file_get_contents($actdirname),$newname);
                                $fp = fopen($actdirname,'w');
                                write($fp,$newname);
                                fclose($fp);

                                Was soll das bewirken?
                                Der Bilderordner erhält nach jedem Aufruf eines Scripts
                                mit diesem Inhalt hier, einen neuen Namen was die
                                Erreichbarkeit ziemlich eingrenzt.

                                Der neue Name ist jeweils in der Datei $actdirname
                                gespeichert, die du ebenfalls noch gegen unbefugten Zugriff
                                sichern könntest.

                                Ok, das führt jetzt alles ein wenig zu weit und
                                soll auch nur eine Gedankenanregung sein.

                                --------------

                                In deinem Fall ist wirklich dann die einfachst Lösung
                                den ganzen Bilderordner oberhalb des Webverzeichnisses
                                zu portieren und eben mit readfile oder file_get_contents auslesen.

                                Gruss
                                Wolke

                                An den ewigen Nörgler Christoph: Ich sehe das nicht als
                                Doppelposting, es beszog sich am Anfang klar auf die Funktion
                                fopen und falls ein anderer danach sucht, findet er so
                                vielleicht auch besser hierhin.

                                1. Hey!

                                  Ja, es ist tatsächlich ein sehr Interessantes Produkt!

                                  Hier ist der Link zum Hersteller:
                                  http://www.sarotech.com/english/cgi/pd.cgi?cmd=view&rno=18

                                  Hm, ich weiss nicht genau was es für ein Betriebsystem ist. Ich denke es ist ein Mini Linux! Viele Befehle wie vi, wget usw.. sind verfügbar! Jedoch sind nicht alle Optionen wie bei normalen Apache Servern verfügbar! ( eben u.a. htaccess )

                                  Die Idee mit dem Verzeichnis Namen ist cool :-) Nur ist es so das ich grossen Wert auf möglichst guten SChutz lege.

                                  Habe das ganz nun mal getestet, habe sowohl die Varainte mit dem chmod 0 als auch mit dem "Verschieben ausserhalb des Root Ordner" versucht, leider konnte ich in beiden Situatuionen mit folgendem Script keine Bilder auslesen.

                                  Wie ungefähr funktioniert dein Ansatz mit readfile oder file_get_contents?

                                  <?php
                                  $filename = "./img/archiv/1/1.jpg";
                                  $user = "<img src="./img/archiv/1/1.jpg">";
                                  $fp = fopen ($filename, "r");
                                  echo $user;

                                  ?>

                                  1. hallo Phil,

                                    Hm, ich weiss nicht genau was es für ein Betriebsystem ist. Ich denke es ist ein Mini Linux! Viele Befehle wie vi, wget usw.. sind verfügbar! Jedoch sind nicht alle Optionen wie bei normalen Apache Servern verfügbar! ( eben u.a. htaccess )

                                    Dann hat sie dein Provider eben nicht freigeschaltet. Du solltest schon die AGB lesen, auch das Kleingedruckte.

                                    Was du machen möchtest, ist vom gedanklichen Ansatz her falsch und von der technischen Umsetzung her unmöglich. Sieh das ein und setze dich mit deinem Provider in Verbindung. Wenn er dir keinen .htaccess-Zugang erlauben möchte, wirst du dir einen anderen Provider suchen müssen. Alles andere ist völlig verlorene Liebesmüh.

                                    Grüße aus Berlin

                                    Christoph S.

                                    --
                                    Visitenkarte
                                    ss:| zu:) ls:& fo:) va:) sh:| rl:|
                                  2. Wie ungefähr funktioniert dein Ansatz mit readfile oder file_get_contents?

                                    Ok mal ganz einfach Schritt für Schritt.
                                    Angenommen dein Script liegt in einem Unterordner
                                    vom Root. Im Verzeichniss b1. Die Bilder liegen
                                    oberhalb vom root.

                                    Jetzt brauchst du erst mal den Pfad zum Bilderordner
                                    ausgehend vom Scriptpfad.

                                    Einfach aber nicht ganz sauber
                                    (solltest die korrekte Pfadangabe nehmen):

                                    $path = '../../../images/';

                                    images
                                     -root
                                      -- a
                                      -- b
                                       --- b1
                                      -- c

                                    So nun das Script:

                                    Zum Testen nimm eine leere Seite und trage dort
                                    Folgendes ein:

                                    <?php
                                    $path = '../../../images/';
                                    $bild = 'xy.jpg';  // natürlich den richtigen Bildnamen
                                    readfile($path.$bild);
                                    ?>

                                    WICHTIG, kein leerzeichen oder andere Text ausserhalb der
                                    PHP Tags.

                                    Teste das ertsmal und sage Bescheid, dann kommt Schritt 2.

                                    1. Hey

                                      Habe alles so gemacht wie beschrieben!

                                      <?php
                                      $path = '../../../'; oder /home/home/
                                      $bild = '1.jpg';
                                      readfile($path.$bild);
                                      ?>

                                      Sobald ich die Datei aufrufe, in der ich den Quelltext abgespeichert habe, erscheint im Browser das laden Zeichen, mehr passiert aber nicht! Er lädt eine ganze Weile ohne das etwas passiert!

                                      Danke und Gruss Phil

                                      1. hallo Phil,

                                        Er lädt eine ganze Weile ohne das etwas passiert!

                                        Doch, es passiert etwas. Nur ist readfile eben nicht dazu geeignet, ein Bild auszulesen. Du solltest deinen Server also nicht mit dem letzten Vorschlag von Wolke quälen. Lies dich doch bitte erstmal ins PHP-Handbuch ein.

                                        Grüße aus Berlin

                                        Christoph S.

                                        --
                                        Visitenkarte
                                        ss:| zu:) ls:& fo:) va:) sh:| rl:|
                                      2. Sobald ich die Datei aufrufe, in der ich den Quelltext abgespeichert habe, erscheint im Browser das laden Zeichen, mehr passiert aber nicht! Er lädt eine ganze Weile ohne das etwas passiert!

                                        Ok, soweit doch schon ganz gut;
                                        jetzt ersetze readfile bitte durch include

                                        1. Jetzt kommen wir doch der Sache schon ziemlich Nahe! Der Aufbau der Seite funktioniert nun sehr schnell, nur wird anstatt des Bildes eine riesen Menge an Buchstaben und Zahlen angezeigt...

                                          Danke + Gruss

                                          1. Jeine riesen Menge an Buchstaben und Zahlen angezeigt...

                                            Ja, das bedeutet du hast doch noch Leerzeichen oder sonstwas
                                            im script. Der Browser zeigt dir das Biild so an wie wenn du
                                            es mit einem Texteditor anseehen würdest.

                                            Ist der php Anfang wirklich ganz oben in deinem Script,
                                            kein leerzeichen dazwischen?

                                            1. Wow, super! Vielen Dank für deine Mühe! Habe noch ein kleines Leerzeichen übersehen :-) Jetzt klappt es super. Kann Bilder von ausserhalb des eigentlichen Website Root aufrufen, somit sind die Bilder super geschützt. ( simmt doch oder? :-)

                                              Nur, kleine Frage, kann ich diesen Code in keine PHP Datei einfügen, in der auch noch weiterer Quelltext steht? Muss die Datei mit deinem Code immer leer sei`n?

                                              1. Nur, kleine Frage, kann ich diesen Code in keine PHP Datei einfügen, in der auch noch weiterer Quelltext steht? Muss die Datei mit deinem Code immer leer sei`n?

                                                Langsam, langsam.

                                                Der Grund, warum das geht ist weil der Browser automatisch erkennt,
                                                dass es ein Bild ist. Mit Leerzeichen wertet er das als HTML/TEXT
                                                Datei und kann das Bild nicht mehr ausgeben, weil dann ja
                                                ein <img>Tag nötig ist, dazu kommen wir jetzt.

                                                Du weisst also schon wie so ein Bild innen aussieht.
                                                Wirres Zahlen und Buchstabengewirr.

                                                Das speichern wir jetzt in einer Variabeln.

                                                Also auch nicht mehr include, sondern

                                                $pic = file_get_contents($path.$bild);

                                                Jetzt zuerstmal zum testen : echo $pic;

                                                1. Hey!

                                                  Okay, mein Code sieht wie folgt aus.

                                                  <?php
                                                  $path = '../../../';
                                                  $bild = '1.jpg';  // natürlich den richtigen Bildnamen
                                                  $pic = file_get_contents($path.$bild);
                                                  echo $pic;
                                                  ?>

                                                  Die Ausgabe im Browser bleibt die gleiche! Ein haufen Zahlen und Buchstaben! Sozusagen Bild Innereien :-)

                                                  1. Die Ausgabe im Browser bleibt die gleiche! Ein haufen Zahlen und

                                                    Buchstaben! Sozusagen Bild Innereien :-)

                                                    Ausgabe gleich ? Bei Include war doch das Bild zu sehen und nicht
                                                    der Salat, oder ?

                                                    1. Ups, es schleichen sich immer Leerzeichen ein! Habe alle Leerzeichen entfernt, jetzt klappts!

                                                      Jetzt klappt es super! Mit dem aktuellen Code erscheint in einem leeren PHP Dokument ein Bild :-)

                                                      1. Na dann ist es ja fast geschafft ;-)

                                                        Du hast jetzt den Inhalt des Bildes in der Variabeln.
                                                        Damit kannst du machen was du willst.

                                                        Willst du nur ein Bild anzeigen, reicht include wie du gesehen
                                                        hast, soll aber auch Text erscheinen, dann muss es in einer Variabeln vorliegen.

                                                        Was jetzt eine <img src.. Angabe verlangt nach einem Pfad nicht
                                                        nach den Innereien eines Bildes.

                                                        In diesem Fall geht nur die Lösung mit dem temporären Pfad,
                                                        die ich anfangs schon erwähnt hatte.

                                                        also copy($original,$temp);  usw.....

                                                        Jetzt mal ausserhalb von PHP.

                                                        <?php

                                                        ?>

                                                        <h1>Ich bin die Seite</h1>

                                                        Das ist das Bild
                                                        <br>
                                                        <img src="<?php echo $tmp;?>" border="0">

                                                        --------------------------------

                                                        Jetzt hast du natürlich ein Duplikat deines Bildes auf dem Server
                                                        liegen, das muss noch weg, entweder in regelmässigen Intervallen,
                                                        oder falls der User durch Session reinkam, nach session Ende,
                                                        oder wie auch immer, tausend Möglichkeiten.

                                                        1. Hey

                                                          Das war mit jetzt ein ganz kleiner SChritt zu schnell. Sorry. Wieso braucht es eine Kopie des Bildes? Wohin soll die Kopie des Bildes den kopiert werden? $original & $temp werden mit dem Original Pfad und dem Kopie Pfad ersetzt? Wieso braucht es den eine Variable wenn ich nachher eine kopie des Bildes auslese?

                                                          Gruss Phil

                                                          1. An deine Bilder kommt jetzt keiner mehr (von aussen) ran,
                                                            wegen oberhalb root.

                                                            Wenn du jetzt das Bild in dein Script reinziehst mit Include
                                                            erstelllst du sozusagen auch eine direkte Kopie.

                                                            Du erinnerst dich an den zahlensalat? Den zieht sich dein Script
                                                            aus dem Bild und gibt Ihn direkt an den Browser des Empfängers aus.

                                                            Logisch dass wenn der Browser zu ist, das Bild dann auch wieder
                                                            weg ist ( na ja nicht ganz, im Browsercache natürlich noch).

                                                            Wenn jetzt aber dein Script noch Texte oder einfach nur Leerzeichen
                                                            HTML Tags oder sonstwas anzeigen soll, musst du dir das so
                                                            vorstellen, dass der Browser alles was Ihm angeboten wird als eine
                                                            Textdatei sieht. Also die vielen verückten zeichen mischen
                                                            sich mit dem rest der Seite und der Browser weiss nicht mehr dass
                                                            es ein bild ist.

                                                            Wie zeigt man den ein Bild im Browser an? Mit einem
                                                            Img tag <img src=....

                                                            Leider kann man da kein bild oder bildinnereien einfügen, das
                                                            verdammte ding will natürlich einen Pfad zu dem Bild.

                                                            Diesen willst du aber nicht rausrücken, bzw, würde auch
                                                            nichts bringen, da oberhalb von root.

                                                            Also brauchen wir eine Kopie von den Bild, und zwar an einem
                                                            Ort auf deinem Server der von aussen erreichbar ist.

                                                            Das ist aber kein Problem, weil diese Kopie ja nur kurz für diesen
                                                            einen besucher erzeugt wird, und danach wieder gelöscht werden soll.

                                                            In diesem Fall brauchst du natürlich nicht den Salat in eine Variable zu speichern, sondern der copy befehl reicht hier.
                                                            War nur als alternative gedacht, wollte dir zuerst das ganze mit
                                                            fwrite zeigen, aber natürlich unnötig.

                                                            1. Ach so! Jetzt habe ich es Verstanden!

                                                              Sobald ein User eine Session eröffnet wird das Bild kopiert, sobald er die Session verläst das temporäre Bild wieder gelöscht! Nur bei sehr grossen Bildergallerien mit vielen Bildern, ist diese Methode warscheindlich doch etwas träge.

                                                              Ich denke mit dem sollte ich wirklich was Anfangen können! Das mit dem Inculde funktioniert ja wunderbar!

                                                              Also, ich bedanke mich für die ausführliche Hilfe! Hast mir sehr geholfen!

                                                              Wünsche einen schönen Abend und nochmals Danke!

                                                              1. Sobald ein User eine Session eröffnet wird das Bild kopiert, sobald er die Session verläst das temporäre Bild wieder gelöscht! Nur bei sehr grossen Bildergallerien mit vielen Bildern, ist diese Methode warscheindlich doch etwas träge.

                                                                Nein, die Menge der Bilder ist egal, nur die Menge der Besucher,
                                                                könnte Auswirkungen haben, aber dann müssen es schon wirklich
                                                                sehr viele sein.

                                                                Na dann machs mal gut und viel Erfolg damit.

                                                                Gruss
                                                                Wolke

                                                            2. echo $begrüßung;

                                                              Wenn du jetzt das Bild in dein Script reinziehst mit Include
                                                              erstelllst du sozusagen auch eine direkte Kopie.

                                                              include ist weder für Bilddaten geeignet noch dafür vorgesehen. include lädt eine Datei nach und interpretiert den Inhalt als HTML+PHP-Code. Wenn darin zufälligerweise die Zeichenfolge <? vorkommt und short_open_tag aktiviert sind gibt es Parse-Fehler. Das bereits mehrfach erwähnte readfile() ist bei Daten, die nicht interpretiert werden sollen vorzuziehen.

                                                              Wie zeigt man den ein Bild im Browser an? Mit einem
                                                              Img tag <img src=....

                                                              Leider kann man da kein bild oder bildinnereien einfügen, das
                                                              verdammte ding will natürlich einen Pfad zu dem Bild.

                                                              Doch, das kann man. Diese Lösung steht aber wegen fehlender Unterstützung durch einige Browser nicht zur Debatte.

                                                              Diesen willst du aber nicht rausrücken, bzw, würde auch
                                                              nichts bringen, da oberhalb von root.

                                                              Also brauchen wir eine Kopie von den Bild, und zwar an einem
                                                              Ort auf deinem Server der von aussen erreichbar ist.

                                                              Nein, brauchen wir nicht. Ein Script, das einen übergebenen Parameter als Dateinamen interpretiert, bzw. einen daraus macht, und bei Berechtigung die Daten dieser Datei ausliefert. Diese Lösung war ja im Laufe des Thread schon mal (zumindest teilweise) vorhanden. Deren Aufruf muss nur in das img-Element eingebunden werden.

                                                              Das ist aber kein Problem, weil diese Kopie ja nur kurz für diesen
                                                              einen besucher erzeugt wird, und danach wieder gelöscht werden soll.

                                                              Das ist ein Problem, weil der Löschmechanismus nicht geklärt ist. All deine Vorschläge dazu waren unausgereift oder schon vom Ansatz her unzuverlässig. Und solange die Kopie nicht gelöscht ist, solange steht sie ungeschützt zur Verfügung. Je mehr Benutzer im System arbeiten, desto größer ist die Wahrscheinlichkeit des ungewollten Zugriffs.

                                                              echo "$verabschiedung $name";

                                                              1. Hallo,

                                                                Also brauchen wir eine Kopie von den Bild, und zwar an einem
                                                                Ort auf deinem Server der von aussen erreichbar ist.

                                                                Nein, brauchen wir nicht. Ein Script, das einen übergebenen Parameter als Dateinamen interpretiert, bzw. einen daraus macht, und bei Berechtigung die Daten dieser Datei ausliefert. Diese Lösung war ja im Laufe des Thread schon mal (zumindest teilweise) vorhanden. Deren Aufruf muss nur in das img-Element eingebunden werden.

                                                                Soso, dann erklär uns dochmal wie das gehen soll.
                                                                Allgemein ist diese Vorgehensweise hier im Forum zu
                                                                kritisieren. Meckern Ja, Konkrete Vorschläge, Nein.

                                                                Das ist ein Problem, weil der Löschmechanismus nicht geklärt ist. »»

                                                                Es gibt viele mögliche Ansätze dazu.
                                                                Bei jedem neuen Aufruf die alten Bildkopien löschen,
                                                                da diese sich jetzt sowieso schon im Browserecache
                                                                des jeweiligen Users befinden. Aber auch ein Löschen
                                                                durch analysieren der PHP Verbindungsdaten wäre möglich.
                                                                connection_status usw...
                                                                Hier muss jeder für sich eine eine spezielle Lösung wählen.

                                                                1. Moin!

                                                                  Also brauchen wir eine Kopie von den Bild, und zwar an einem
                                                                  Ort auf deinem Server der von aussen erreichbar ist.

                                                                  Nein, brauchen wir nicht. Ein Script, das einen übergebenen Parameter als Dateinamen interpretiert, bzw. einen daraus macht, und bei Berechtigung die Daten dieser Datei ausliefert. Diese Lösung war ja im Laufe des Thread schon mal (zumindest teilweise) vorhanden. Deren Aufruf muss nur in das img-Element eingebunden werden.

                                                                  Soso, dann erklär uns dochmal wie das gehen soll.
                                                                  Allgemein ist diese Vorgehensweise hier im Forum zu
                                                                  kritisieren. Meckern Ja, Konkrete Vorschläge, Nein.

                                                                  Wenn etwas zu kritisieren ist (wie beispielsweise das meiste deiner Vorschläge in diesem Thread), dann soll das getan werden.

                                                                  Und wenn du die Gegenvorschläge nicht verstehst, liegt das nicht immer am Kritisierenden.

                                                                  Gemeint ist, im HTML-Quelltext sowas unterzubringen:
                                                                  <img src="bildleser.php?zielbild=wasauchimmer.jpg">

                                                                  Und das Skript "bildleser.php" reicht dann das angeforderte Bild weiter, wenn Passwort etc. stimmen. Und zwar mit readfile() und passendem header() - nicht so, wie du das hier demonstriert hast (das ist echt übel gewesen).

                                                                  Das ist ein Problem, weil der Löschmechanismus nicht geklärt ist. »»

                                                                  Es gibt viele mögliche Ansätze dazu.

                                                                  Es gibt beim Programmieren immer viele mögliche Ansätze.

                                                                  Das, was du oben kritisierst, nämlich konkrete Vorschläge, kommen von dir ja aber auch nicht.

                                                                  Bei jedem neuen Aufruf die alten Bildkopien löschen,
                                                                  da diese sich jetzt sowieso schon im Browserecache
                                                                  des jeweiligen Users befinden.

                                                                  Was ist mit parallelen Zugriffen? User 2 löscht das Bild, was User 1 gerade generiert, aber noch nicht abgerufen hat. Sehr unschön.

                                                                  Und auch die Cache-Methode scheitert gerne grandios, weil skript-generierte Ausgaben explizit die Cache-Angabe "nicht speichern" haben - anders kriegt man sonst keine dynamischen Seiten aktualisiert.

                                                                  Aber auch ein Löschen durch analysieren der PHP Verbindungsdaten wäre möglich.

                                                                  Konkret wie?

                                                                  connection_status usw...

                                                                  "usw..." - dann mach doch mal weiter.

                                                                  Hier muss jeder für sich eine eine spezielle Lösung wählen.

                                                                  Allgemeinplatzalarm!

                                                                  DU hast hier mit der Dateikopiererei angefangen - also bringe deinen Ansatz auch zu Ende!

                                                                  - Sven Rautenberg

                                                                  --
                                                                  "Love your nation - respect the others."
                                                                  1. Hallo Sven,

                                                                    Wenn etwas zu kritisieren ist (wie beispielsweise das meiste deiner Vorschläge in diesem Thread), dann soll das getan werden.

                                                                    Kritik ohne Alternative halte ich für fehlplaziert.
                                                                    Was meine Vorgensweise betrifft: Ich habe bereits am
                                                                    Anfang des threads darauf hingewiesen wie, es zu machen wäre.
                                                                    Da Phil das so nicht verstanden hat bin ich, auch absichtlich
                                                                    mit Fehlen behaftet das stück für stück durchgegangen.

                                                                    Resultat, er hats verstanden und es klappt.

                                                                    Und wenn du die Gegenvorschläge nicht verstehst, liegt das nicht

                                                                    immer am Kritisierenden.

                                                                    Gemeint ist, im HTML-Quelltext sowas unterzubringen:
                                                                    <img src="bildleser.php?zielbild=wasauchimmer.jpg">

                                                                    »»

                                                                    Wol liegt hier der Sinn ?

                                                                    Und das Skript "bildleser.php" reicht dann das angeforderte Bild weiter, wenn Passwort etc. stimmen. Und zwar mit readfile() und passendem header() - nicht so, wie du das hier demonstriert hast (das ist echt übel gewesen).

                                                                    Das war nur eine Demonstration, das wollt ePhil so gar nicht
                                                                    insofern brauche ich ihn nicht auch noch mit headerballast
                                                                    durcheinander zu bringen.

                                                                    Er will Text und Bild auf einer Seite haben, und das geht nur
                                                                    mit src=... somit hilft hier readfile nicht weiter.

                                                                    Das ist ein Problem, weil der Löschmechanismus nicht geklärt ist. »»

                                                                    Es gibt viele mögliche Ansätze dazu.

                                                                    Es gibt beim Programmieren immer viele mögliche Ansätze.

                                                                    Das, was du oben kritisierst, nämlich konkrete Vorschläge, kommen von dir ja aber auch nicht.

                                                                    Ja, ich wusste das würde Jemand sagen, aber dieser Part hat
                                                                    auch nichts mehr mit der eigentlichen Frage zu tun, denn
                                                                    sein Problem ist soweit geklärt.

                                                                    Sollte ich dazu auch noch Vorschläge machen würde dieser
                                                                    Thread ins Unendliche laufen.

                                                                    1. Moin!

                                                                      Und wenn du die Gegenvorschläge nicht verstehst, liegt das nicht immer am Kritisierenden.

                                                                      Gemeint ist, im HTML-Quelltext sowas unterzubringen:
                                                                      <img src="bildleser.php?zielbild=wasauchimmer.jpg">
                                                                      »»

                                                                      Wol liegt hier der Sinn ?

                                                                      Genau das ist dein Problem: Du verstehst anscheinend die Zusammenhänge nicht, die bei dem Zusammenspiel von HTML, HTTP-Requests und PHP-Skriptaufrufen bestehen.

                                                                      Und das Skript "bildleser.php" reicht dann das angeforderte Bild weiter, wenn Passwort etc. stimmen. Und zwar mit readfile() und passendem header() - nicht so, wie du das hier demonstriert hast (das ist echt übel gewesen).

                                                                      Das war nur eine Demonstration, das wollt ePhil so gar nicht
                                                                      insofern brauche ich ihn nicht auch noch mit headerballast
                                                                      durcheinander zu bringen.

                                                                      Dein sogenannter "headerballast" ist zwingend notwendig für eine standardkonforme und browserübergreifend funktionierende Bildauslieferung. Dass der IE hier eine Ausnahme bildet und bei gewissen Mime-Typen selbst nachschaut, welcher Medientyp da kommt, wurde erwähnt. Die Welt besteht aber nicht nur aus IEs, wie dir jede Browserstatistik beweist.

                                                                      Er will Text und Bild auf einer Seite haben, und das geht nur
                                                                      mit src=... somit hilft hier readfile nicht weiter.

                                                                      Es geht ihm darum, dass der Zugriff auf die Bilder nur passwortgeschützt erlaubt sein soll. Mangels der Möglichkeit, HTTP-Authentifizierung über .htaccess zu konfigurieren, sucht er eine Ersatzmöglichkeit.

                                                                      Und die besteht darin, den HTTP-Request auf das Bild abzufangen, und dabei die Benutzerauthenfizierung zu prüfen. Alles andere ist Mumpitz.

                                                                      Das ist ein Problem, weil der Löschmechanismus nicht geklärt ist. »»

                                                                      Es gibt viele mögliche Ansätze dazu.

                                                                      Es gibt beim Programmieren immer viele mögliche Ansätze.

                                                                      Das, was du oben kritisierst, nämlich konkrete Vorschläge, kommen von dir ja aber auch nicht.

                                                                      Ja, ich wusste das würde Jemand sagen, aber dieser Part hat
                                                                      auch nichts mehr mit der eigentlichen Frage zu tun, denn
                                                                      sein Problem ist soweit geklärt.

                                                                      Sein neu erzeugtes Problem ist, dass er mit der Zeit alle Bilder doppelt auf seinem Server hat, auf die auch wieder jeder beliebige User zugreifen kann.

                                                                      Also ist nichts gewonnen.

                                                                      Sollte ich dazu auch noch Vorschläge machen würde dieser Thread ins Unendliche laufen.

                                                                      Das kritisiere ich: Unausgegorene Vorschläge von dir, die das Problem nur halb lösen - verbunden mit viel Geraschel von wegen "das Forum ist ja so schlecht" (und implizit: "Ich kann das viel besser.").

                                                                      Wenn's aber aufwendig wird, kneifst du.

                                                                      - Sven Rautenberg

                                                                      --
                                                                      "Love your nation - respect the others."
                                                                      1. Dein sogenannter "headerballast" ist zwingend notwendig für eine standardkonforme und browserübergreifend funktionierende Bildauslieferung. Dass der IE hier eine Ausnahme bildet und bei gewissen Mime-Typen selbst nachschaut, welcher Medientyp da kommt, wurde erwähnt. Die Welt besteht aber nicht nur aus IEs, wie dir jede Browserstatistik beweist.

                                                                        NEIN IST ES NICHT, weil es hier lediglich um eine Demonstration
                                                                        geht. Du sagst ja auch nicht alle Errors müssen ständig angezeigt
                                                                        werden. Sein gewünschtes Ergebniss beinhält keinerlei
                                                                        direkte nackte Ausgabe am Browser. Nur für Ihn zum Testen !!!
                                                                        Und wenn sein Browser das offensichtlich so anzeigt,
                                                                        wofür dann noch die Headerangaben?

                                                                        Und die besteht darin, den HTTP-Request auf das Bild abzufangen, und dabei die Benutzerauthenfizierung zu prüfen. Alles andere ist Mumpitz.

                                                                        Diese Lösung hatte ich Ihm schon am Anfang des Threads
                                                                        breitgestellt. Aber er will es so nicht, begreift Ihr das mal?

                                                                        Wenn's aber aufwendig wird, kneifst du.

                                                                        Oh nein, aber für wen? Ihr seid nicht einmal in der Lage zu
                                                                        begreifen was Phil eigentlich will.
                                                                        Wenn Ihr das begriffen habt, nämlich:

                                                                        1. Sein Bilderordner oberhalb von Root
                                                                        2. Kein Standalone Bild im Browser

                                                                        werdet Ihr erkennen, dass hier niemals ein Dateiauslesen
                                                                        oder eine erlaubte Pfadangabe zu einem Originalen Bild
                                                                        stattfindet.

                                                                        Und dann, falls Phil es wissen möchte zeige, ich Ihm gerne
                                                                        noch eine akzeptable Lösung für das Löschen der Files.
                                                                        Was aber meiner Meinung nach in einem neuen thread gehört,
                                                                        ala Wie lösche ich temporäre Dateien sinnvoll?

                                                                        Denn dann finden auch Personen die Hile, die nur speziell
                                                                        nach sowas suchen.

                                                                        1. Hallo

                                                                          Dein sogenannter "headerballast" ist zwingend notwendig für eine standardkonforme und browserübergreifend funktionierende Bildauslieferung.

                                                                          NEIN IST ES NICHT, weil es hier lediglich um eine Demonstration
                                                                          geht. ... Sein gewünschtes Ergebniss beinhält keinerlei
                                                                          direkte nackte Ausgabe am Browser.

                                                                          Doch.

                                                                          Und wenn sein Browser das offensichtlich so anzeigt,
                                                                          wofür dann noch die Headerangaben?

                                                                          Für die angemeldeten Benutzer, denen er seine Urlaubsfotos vorzeigen will? Ansonsten müsste er die bestimmt nicht auf seinem Webserver lagern.

                                                                          Diese Lösung hatte ich Ihm schon am Anfang des Threads
                                                                          breitgestellt. Aber er will es so nicht, begreift Ihr das mal?

                                                                          Will er nicht? Klingt für mich nicht so.

                                                                          Wenn's aber aufwendig wird, kneifst du.
                                                                          Oh nein, aber für wen? Ihr seid nicht einmal in der Lage zu
                                                                          begreifen was Phil eigentlich will.
                                                                          Wenn Ihr das begriffen habt, nämlich:

                                                                          1. Sein Bilderordner oberhalb von Root
                                                                          2. Kein Standalone Bild im Browser

                                                                          Soweit waren wir schon mal. Komischerweise favoorisiert phil genau die Lösung, die Sven und dedlfix hier propagieren, auch wenn seine Umsetzung noch nicht ausgereift ist.

                                                                          werdet Ihr erkennen, dass hier niemals ein Dateiauslesen
                                                                          oder eine erlaubte Pfadangabe zu einem Originalen Bild
                                                                          stattfindet.

                                                                          Aber eine Pfadangabe zu einer Kopie, die temporär öffentlich zugänglich ist, was sie aber nicht sein soll.

                                                                          Du lässt ein PHP-Skript einen HTML-Schnipsel mit einem img-Tag generieren, der eine temporär öffentlich zugängliche Bilddatei aufruft.

                                                                          echo '[code lang=html]<img href="temp/bild.jpg">';[/code]

                                                                          In der anderen Lösung generiert das Skript keinen img-Tag, denn es ist selbst die aufzurufende Ressouce des img-Tags. Es ist, bzw. wird selbst in gewisser Weise zum Bild. Kein Pfad, kein temporäres File, kein Nichts, das auf den Lagerungsort des Bildes hinweisen würde. Und ohne ein temporäres Bild auch keine Notwendigkeit des Löschens eines Solchen.

                                                                          Was klingt nun professioneller, das Skript ein Bild ausgeben lassen oder eine zugängliche Kopie erzeugen und wieder löschen müssen?

                                                                          <img href="bildleser.php"> Das ist alles, was im übermittelten Quelltext steht.

                                                                          Du weißt doch bestimmt: "Bildleser wissen mehr." ;-)

                                                                          Und dann, falls Phil es wissen möchte zeige, ich Ihm gerne
                                                                          noch eine akzeptable Lösung für das Löschen der Files.
                                                                          Was aber meiner Meinung nach in einem neuen thread gehört,
                                                                          ala Wie lösche ich temporäre Dateien sinnvoll?

                                                                          Wieso? Wenn, dann gehörte das hierhin. Sozusagen als Abschluss der Problemlösung.

                                                                          Tschö, Auge

                                                                          --
                                                                          Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
                                                                          (Victor Hugo)
                                                                          Veranstaltungsdatenbank Vdb 0.1
                                                                          1. Oweia,
                                                                            natürlich.

                                                                            Muss ein Brett vorm Kopf gehabt haben.
                                                                            Natürlich ist die sinnvollste Lösung:

                                                                            1. Bilder oberhalb vom Root
                                                                            2. Eine Php Datei prüft die Zugriffsrechte
                                                                            3. Eine andere (könnte auch dieselbe sein)Php Datei
                                                                            gibt das Bild inklusive Headerausgaben aus.

                                                                            Somit geht natürlich auch wieder die <img>.

                                                                            Wodurch mein Blackout?
                                                                            Zum einen haben mich die Kommentare von Christoph
                                                                            genervt. https://forum.selfhtml.org/?t=134788&m=874677

                                                                            Desweiteren kam nicht ein einziges Mal ein Codeschnipsel
                                                                            rüber, was uns zum Überlegen angeregt hätte.

                                                                            So war ich dermaßen darauf fixiert nur eine Php Datei zu haben
                                                                            die das Bild inklusive text ausgeben soll in einem Arbeitsgang.

                                                                            Logisch, dass mit 2 Arbeitsgängen das geht, hat aber keiner
                                                                            genau so gesagt, hiess immer nicht so und auch nicht so,
                                                                            aber nie: So müsste man das machen, dann hätte ich es erkannt.

                                                                            So nun mal zum Abschluss:

                                                                              
                                                                              
                                                                              
                                                                            <?php  
                                                                            ######################  
                                                                            /*  
                                                                            Hier muss jetzt noch die Berechtigungsprüfung rein.  
                                                                            Da ich nicht weiss, wie diese aussieht, lass ichs offen.  
                                                                            // if($_SESSION['xy'] != 'blabla'){die('ZUGRIFF VERBOTEN');}  
                                                                              
                                                                            */  
                                                                            ######################  
                                                                            $hier = $_SERVER['PHP_SELF'];  
                                                                              
                                                                            $bildverz = 'pics/';  // inkl. slash am Ende  
                                                                            $bildpfad = $_SERVER['DOCUMENT_ROOT'];  
                                                                            $bildpfad = str_replace('\\','/',$bildpfad);  
                                                                            $bildpfad = substr($bildpfad,0,strrpos($bildpfad,'/'));  
                                                                            $bildpfad = $bildpfad.'/'.$bildverz;  
                                                                              
                                                                              
                                                                              
                                                                            ################# Ausgabesteuerung einzelne Bilder #############  
                                                                            if($_GET['pic'])  
                                                                            {  
                                                                            // Falls jetzt nochmehr Beschränkungen sein sollten,  
                                                                            // zb. weill vorher Thumbnails und jetzt Grossansicht,  
                                                                            // müsste hier noch mal eine seperate Prüfung stattfinden.  
                                                                              
                                                                              
                                                                              
                                                                            $pic = $_GET['pic'];  
                                                                              
                                                                            $pic = stripslashes($pic);  
                                                                            $pic = urldecode($pic);  
                                                                              
                                                                              
                                                                              
                                                                              
                                                                              
                                                                            if(!file_exists($bildpfad.$pic) ){echo '<h1>DATEI NICHT GEFUNDEN</h1>';}  
                                                                            // diese Ausgabe würde ich dann aber durch ein default image ersetzen  
                                                                              
                                                                            else{  
                                                                            clearstatcache();  
                                                                            $pictyp = str_replace('.','',strrchr($pic,'.'));  
                                                                            header('content-type:image/'.$pictyp);  
                                                                            header('Content-Disposition: filename='.$pic);  
                                                                              
                                                                              
                                                                            readfile($bildpfad.$pic);  
                                                                            exit(); // keine weitere Ausgabe  
                                                                            }  
                                                                            }  
                                                                              
                                                                              
                                                                              
                                                                            ######### Eigentliche Seite #####################################  
                                                                            // Nur ein Beispiel zur Bildausagabe  
                                                                            if($godir = opendir($bildpfad))  
                                                                            {  
                                                                              
                                                                                while (false !== ($file = readdir($godir))){  
                                                                                     $i++; if($i > 200){die('SICHERHEITS - STOP');}  
                                                                             if ($file == "." || $file == "..") {continue;}  
                                                                                $src = "$hier?pic=$file";  
                                                                                        $imgs .= '<a href="'.$src.'"><img width="100" height="100" src="'.$src.'" border="0"></a><br>'."\r\n";  
                                                                              
                                                                                }  
                                                                              
                                                                            closedir($godir);  
                                                                            }  
                                                                              
                                                                              
                                                                              
                                                                            ?>  
                                                                            <html>  
                                                                            <head>  
                                                                            <title>Galleria</title>  
                                                                              
                                                                            </head>  
                                                                            <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">  
                                                                              
                                                                            <?php echo $imgs;?>  
                                                                              
                                                                            </body>  
                                                                            </html>  
                                                                              
                                                                              
                                                                            
                                                                            

                                                                            Hier befindet sich alles in einem File,
                                                                            kann sowohl als galerie , als auch direkte Bildangabe
                                                                            verwendet werden.
                                                                            zb.
                                                                            diesedatei.php
                                                                            oder ->
                                                                            diesedatei.php?pic=xyz.jpg

                                                                            Gruss
                                                                            Wolke

                                                                            1. Moin!

                                                                              So nun mal zum Abschluss:

                                                                              Dein Code ist allerdings noch deutlich verbesserungswürdig!

                                                                                
                                                                              
                                                                              > <?php  
                                                                              > ######################  
                                                                              > /*  
                                                                              > Hier muss jetzt noch die Berechtigungsprüfung rein.  
                                                                              > Da ich nicht weiss, wie diese aussieht, lass ichs offen.  
                                                                              > // if($_SESSION['xy'] != 'blabla'){die('ZUGRIFF VERBOTEN');}  
                                                                              >   
                                                                              > */  
                                                                              > ######################  
                                                                              > $hier = $_SERVER['PHP_SELF'];  
                                                                                
                                                                              // Wozu sinnlos kopieren?  
                                                                                
                                                                              
                                                                              > $bildverz = 'pics/';  // inkl. slash am Ende  
                                                                                
                                                                              // Eine Definition, zu der du sagen solltest, wie sie zu verstehen ist. Welcher Pfad ist hier anzugeben?  
                                                                                
                                                                              
                                                                              > $bildpfad = $_SERVER['DOCUMENT_ROOT'];  
                                                                                
                                                                              // Wieder eine sinnlose Kopie.  
                                                                                
                                                                              
                                                                              > $bildpfad = str_replace('\\','/',$bildpfad);  
                                                                                
                                                                              // Wozu das? In $_SERVER['DOCUMENT_ROOT']; sind keine Backslashes enthalten, die man in Slashes wandeln müßte. Wenn doch, dann kann das verwendete XAMP-System damit auch umgehen. Ansonsten würde der Apache nämlich streiken müssen.  
                                                                                
                                                                              
                                                                              > $bildpfad = substr($bildpfad,0,strrpos($bildpfad,'/'));  
                                                                                
                                                                              // Eine undurchsichtige Stringoperation, die von unsicheren Annahmen ausgeht. $_SERVER['DOCUMENT_ROOT'] endet nicht zwingend mit einem Slash, was dir hier dann mehr abschneidet, als du willst...  
                                                                                
                                                                              
                                                                              > $bildpfad = $bildpfad.'/'.$bildverz;  
                                                                                
                                                                              // ...nur um am Ende dann zu einem absoluten Pfad zu kommen, der dann doch innerhalb des DOCUMTENT_ROOT liegt, aber einfacher und sinnvoller so definiert würde:  
                                                                                
                                                                              $bildpfad = "/pfad/zum/bild/dir/";  
                                                                                
                                                                              // Das ist einfach und klar verständlich. Und funktioniert immer.  
                                                                                
                                                                                
                                                                              
                                                                              > ################# Ausgabesteuerung einzelne Bilder #############  
                                                                              > if($_GET['pic'])  
                                                                                
                                                                              // An dieser Stelle wirft dir PHP eine NOTICE beim Skriptaufruf ohne Parameter, der vermeidbar ist.  
                                                                                
                                                                              if (isset($_GET['pic']) // besser so fragen, ob Variablen definiert sind.  
                                                                                
                                                                              
                                                                              > {  
                                                                              > $pic = $_GET['pic'];  
                                                                                
                                                                              // wieder eine sinnlose Kopie!  
                                                                                
                                                                              
                                                                              > $pic = stripslashes($pic);  
                                                                                
                                                                              // Das darf nur passieren, wenn magic_quotes_gpc auf ON steht.  
                                                                                
                                                                              
                                                                              > $pic = urldecode($pic);  
                                                                                
                                                                              // Das darf nicht passieren, GET-Parameter sind schon dekodiert.  
                                                                                
                                                                              // Es fehlt eine wirksame Prüfung, ob in $pic nicht ggf. relative Pfadangaben eingeschleppt würden. Die Stringfunktion basename() ist dafür sehr geeignet (auch wenn sie unter Filesystem-Funktionen steht).  
                                                                                
                                                                              
                                                                              > if(!file_exists($bildpfad.$pic) ){echo '<h1>DATEI NICHT GEFUNDEN</h1>';}  
                                                                              > // diese Ausgabe würde ich dann aber durch ein default image ersetzen  
                                                                              > else{  
                                                                              > clearstatcache();  
                                                                                
                                                                              // Der Aufruf von clearstatcache() an dieser Stelle ist mehr als sinnlos - er kostet bei Dateimetadatenoperationen (die du nicht benutzt) auch richtig Performance, wenn man ihn unbedacht anwendet.  
                                                                                
                                                                              
                                                                              > $pictyp = str_replace('.','',strrchr($pic,'.'));  
                                                                              > header('content-type:image/'.$pictyp);  
                                                                                
                                                                              // JPEG-Bilder werden typischerweise mit der Endung ".jpg" gespeichert - der ihnen zugeordnete Mime-Typ lautet aber "image/jpeg". Du schickst hier also falsche Headerangaben.  
                                                                                
                                                                              // Korrekte Mime-Typen erhält man beispielsweise durch die Funktionen getimagesize(), image_type_to_mime_type() oder mime_content_type().  
                                                                                
                                                                              
                                                                              > header('Content-Disposition: filename='.$pic);  
                                                                                
                                                                              // Durch die ungeprüfte Weiterreichung von $pic ergibt sich an dieser Stelle ggf. Angriffspotential auf den Benutzerbrowser.  
                                                                                
                                                                              
                                                                              > readfile($bildpfad.$pic);  
                                                                              > exit(); // keine weitere Ausgabe  
                                                                                
                                                                              // Das Skript wird nur dann abgebrochen, wenn tatsächlich erfolgreich ein Bild gefunden und ausgegeben wurde. In allen anderen Fällen läuft das Skript bei einem Request nach einem Bild weiter in den HTML-generierenden Teil.  
                                                                                
                                                                              
                                                                              > }  
                                                                              > }  
                                                                              >   
                                                                              >   
                                                                              >   
                                                                              > ######### Eigentliche Seite #####################################  
                                                                              > // Nur ein Beispiel zur Bildausagabe  
                                                                              > if($godir = opendir($bildpfad))  
                                                                              > {  
                                                                              >   
                                                                              >     while (false !== ($file = readdir($godir))){  
                                                                              >          $i++; if($i > 200){die('SICHERHEITS - STOP');}  
                                                                                
                                                                              // Der Sicherheits-Stopp sollte parametrierbar (Definition einer Konstanten am Skriptanfang) und kommentiert sein.  
                                                                                
                                                                              
                                                                              >  if ($file == "." || $file == "..") {continue;}  
                                                                              >     $src = "$hier?pic=$file";  
                                                                              >             $imgs .= '<a href="'.$src.'"><img width="100" height="100" src="'.$src.'" border="0"></a><br>'."\r\n";  
                                                                                
                                                                              // Wieder reichlich sinnlose Kopiererei.  
                                                                              // Die Variable $imgs wird nicht initialisiert.  
                                                                              // Die Dateinamen als URL-Parameter werden nicht kodiert!  
                                                                                
                                                                              // Die Thumbnail-Generierung ist ausgelassen, der Browser würde die Bilder komplett herunterladen und selbst skalieren müssen.  
                                                                                
                                                                              
                                                                              >     }  
                                                                              >   
                                                                              > closedir($godir);  
                                                                              > }  
                                                                              > ?>  
                                                                              
                                                                              

                                                                              - Sven Rautenberg

                                                                              --
                                                                              "Love your nation - respect the others."
                                                                              1. Hallo,

                                                                                Dein Code ist allerdings noch deutlich verbesserungswürdig!

                                                                                Natürlich ist er das, aber er funktioniert muss nur
                                                                                individalisiert werden. Die wesentlichen Sachen sind aber enthalten.

                                                                                ######################
                                                                                $hier = $_SERVER['PHP_SELF'];

                                                                                // Wozu sinnlos kopieren?

                                                                                Jeder hat seinen Stil und je nach späterer Verwendung
                                                                                ist das für mich so komfortabler.

                                                                                $bildverz = 'pics/';  // inkl. slash am Ende

                                                                                // Eine Definition, zu der du sagen solltest, wie sie zu verstehen ist. Welcher Pfad ist hier anzugeben?

                                                                                Stimmt

                                                                                $bildpfad = $_SERVER['DOCUMENT_ROOT'];

                                                                                // Wieder eine sinnlose Kopie.

                                                                                Wie ich schon sagte, aufgeräumter und komfortabler

                                                                                $bildpfad = str_replace('\','/',$bildpfad);

                                                                                // Wozu das? In $_SERVER['DOCUMENT_ROOT']; sind keine Backslashes enthalten, die man in Slashes wandeln müßte. Wenn doch, dann kann das verwendete XAMP-System damit auch umgehen. Ansonsten würde der Apache nämlich streiken müssen.

                                                                                Hier irrst du, hatte schon etliche Proble deswegen.

                                                                                $bildpfad = substr($bildpfad,0,strrpos($bildpfad,'/'));

                                                                                // Eine undurchsichtige Stringoperation, die von unsicheren Annahmen ausgeht. $_SERVER['DOCUMENT_ROOT'] endet nicht zwingend mit einem Slash, was dir hier dann mehr abschneidet, als du willst...

                                                                                $bildpfad = $bildpfad.'/'.$bildverz;

                                                                                // ...nur um am Ende dann zu einem absoluten Pfad zu kommen, der dann doch innerhalb des DOCUMTENT_ROOT liegt, aber einfacher und sinnvoller so definiert würde:

                                                                                $bildpfad = "/pfad/zum/bild/dir/";
                                                                                // Das ist einfach und klar verständlich. Und funktioniert immer.

                                                                                NEIN, man landet oberhalb vom root. Bei deiner Version nicht.

                                                                                ################# Ausgabesteuerung einzelne Bilder #############
                                                                                if($_GET['pic'])

                                                                                // An dieser Stelle wirft dir PHP eine NOTICE beim Skriptaufruf ohne Parameter, der vermeidbar ist.

                                                                                Ich weiss, habe mich aber daran gewöhnt wie
                                                                                die meissten, bin halt auch faul bei sowas und
                                                                                werde auch in Zukunft, wie die meissten, diese Notice
                                                                                nicht ignorieren.

                                                                                if (isset($_GET['pic']) // besser so fragen, ob Variablen definiert sind.

                                                                                In diesem Fall ja, aber oft will man auch dass was drin steht
                                                                                und dann ist es einfacher wie ich es mache, trotz notice.

                                                                                $pic = stripslashes($pic);
                                                                                // Das darf nur passieren, wenn magic_quotes_gpc auf ON steht.

                                                                                Ok, könnte man auch noch abfragen.

                                                                                // Es fehlt eine wirksame Prüfung, ob in $pic nicht ggf. relative Pfadangaben eingeschleppt würden. Die Stringfunktion basename() ist dafür sehr geeignet (auch wenn sie unter Filesystem-Funktionen steht).

                                                                                // Der Aufruf von clearstatcache() an dieser Stelle ist mehr als sinnlos - er kostet bei Dateimetadatenoperationen (die du nicht benutzt) auch richtig Performance, wenn man ihn unbedacht anwendet.

                                                                                Wusste ich nicht, im Manual wird konkret darauf bestanden,
                                                                                nach jeder file_exists() Abfrage.

                                                                                $pictyp = str_replace('.','',strrchr($pic,'.'));
                                                                                header('content-type:image/'.$pictyp);

                                                                                // JPEG-Bilder werden typischerweise mit der Endung ".jpg" gespeichert - der ihnen zugeordnete Mime-Typ lautet aber "image/jpeg". Du schickst hier also falsche Headerangaben.

                                                                                Ups, stimmt hatte ich vergessen, schade.

                                                                                // Durch die ungeprüfte Weiterreichung von $pic ergibt sich an dieser Stelle ggf. Angriffspotential auf den Benutzerbrowser.

                                                                                »»
                                                                                Wüsste jetzt nicht was ich da noch prüfen sollte ?

                                                                                readfile($bildpfad.$pic);
                                                                                exit(); // keine weitere Ausgabe

                                                                                // Das Skript wird nur dann abgebrochen, wenn tatsächlich erfolgreich ein Bild gefunden und ausgegeben wurde. In allen anderen Fällen läuft das Skript bei einem Request nach einem Bild weiter in den HTML-generierenden Teil.

                                                                                Nein soll es nicht, Habe da schon die verrücktesten Sachen
                                                                                bei den Vor zurück und reload Funktionen des Browsers erlebt.

                                                                                // Wieder reichlich sinnlose Kopiererei.
                                                                                // Die Variable $imgs wird nicht initialisiert.
                                                                                // Die Dateinamen als URL-Parameter werden nicht kodiert!

                                                                                // Die Thumbnail-Generierung ist ausgelassen, der Browser würde die Bilder komplett herunterladen und selbst skalieren müssen.

                                                                                Ist doch nur ein kurzes Beispiel (steht auch darüber) um
                                                                                zu zeigen ob das Auslesen überhaubt klappt. Muss jeder für seine
                                                                                Bedürfnisse anpassen.

                                                                                Gruss
                                                                                Wolke

                                                                                1. Moin!

                                                                                  Dein Code ist allerdings noch deutlich verbesserungswürdig!

                                                                                  Natürlich ist er das, aber er funktioniert muss nur
                                                                                  individalisiert werden. Die wesentlichen Sachen sind aber enthalten.

                                                                                  Das ist leider sehr häufig das Problem: Es wird nur entwickelt, bis es funktioniert, und auch nur geprüft, dass es funktioniert, wenn alles korrekt läuft. Fehlerkonditionen geraten gerne aus dem Blickfeld.

                                                                                  ######################
                                                                                  $hier = $_SERVER['PHP_SELF'];

                                                                                  // Wozu sinnlos kopieren?

                                                                                  Jeder hat seinen Stil und je nach späterer Verwendung
                                                                                  ist das für mich so komfortabler.

                                                                                  Extrem nervig, wie ich finde. Verseucht den globalen Variablenraum mit unnötigen Variablen, deren sinnvolle Neubezeichnung man sich auch noch ausdenken muß - und an die man sich an anderer Stelle, wo es um den gleichen Wert geht, wieder erinnern muß.

                                                                                  $bildpfad = $_SERVER['DOCUMENT_ROOT'];

                                                                                  // Wieder eine sinnlose Kopie.

                                                                                  Wie ich schon sagte, aufgeräumter und komfortabler

                                                                                  Undurchsichtiger, ressourcenverschwendender. Etwas weniger Tipparbeit.

                                                                                  $bildpfad = str_replace('\','/',$bildpfad);

                                                                                  // Wozu das? In $_SERVER['DOCUMENT_ROOT']; sind keine Backslashes enthalten, die man in Slashes wandeln müßte. Wenn doch, dann kann das verwendete XAMP-System damit auch umgehen. Ansonsten würde der Apache nämlich streiken müssen.

                                                                                  Hier irrst du, hatte schon etliche Proble deswegen.

                                                                                  Nun ja, für die korrekte Serverkonfiguration ist der Admin zuständig. Und Windows-Maschinen sollte man ja sowieso nicht ins Internet lassen[TM]. ;)

                                                                                  $bildpfad = substr($bildpfad,0,strrpos($bildpfad,'/'));

                                                                                  // Eine undurchsichtige Stringoperation, die von unsicheren Annahmen ausgeht. $_SERVER['DOCUMENT_ROOT'] endet nicht zwingend mit einem Slash, was dir hier dann mehr abschneidet, als du willst...

                                                                                  $bildpfad = $bildpfad.'/'.$bildverz;

                                                                                  // ...nur um am Ende dann zu einem absoluten Pfad zu kommen, der dann doch innerhalb des DOCUMTENT_ROOT liegt, aber einfacher und sinnvoller so definiert würde:

                                                                                  $bildpfad = "/pfad/zum/bild/dir/";
                                                                                  // Das ist einfach und klar verständlich. Und funktioniert immer.

                                                                                  NEIN, man landet oberhalb vom root. Bei deiner Version nicht.

                                                                                  Wie gesagt: Undurchsichtige Stringoperation, die in Abhängigkeit von DOCUMENT_ROOT eben mal mehr, mal weniger abschneidet. Auf einem konkreten System wird man zwar immer im gleichen Verzeichnis landen - für ein Beispielskript ist der Code aber deswegen unbrauchbar.

                                                                                  Bei meiner Version landet man überall, wo man will:

                                                                                    
                                                                                  $bildpfad = "/"; // Rootverzeichnis  
                                                                                  $bildpfad = "/home/benutzer/meine_bilder/"; // beliebiges Benutzerverzeichnis  
                                                                                  $bildpfad = "/var/www/localhost/htdocs/bilder/"; //mutmaßlich ein Verzeichnis innerhalb von DOCUMENT_ROOT  
                                                                                  
                                                                                  

                                                                                  if (isset($_GET['pic']) // besser so fragen, ob Variablen definiert sind.

                                                                                  In diesem Fall ja, aber oft will man auch dass was drin steht
                                                                                  und dann ist es einfacher wie ich es mache, trotz notice.

                                                                                  Was ist, wenn in $_GET['pic'] etwas drinsteht, was PHP zu "false" evaluiert? Der String "0" beispielsweise fällt darunter.

                                                                                  $pic = stripslashes($pic);
                                                                                  // Das darf nur passieren, wenn magic_quotes_gpc auf ON steht.

                                                                                  Ok, könnte man auch noch abfragen.

                                                                                  Ersetze "könnte man" durch "muß man".

                                                                                  register_globals ist schon lange "out", magic_quotes_gpc ist als nächstes am Aussterben.

                                                                                  // Der Aufruf von clearstatcache() an dieser Stelle ist mehr als sinnlos - er kostet bei Dateimetadatenoperationen (die du nicht benutzt) auch richtig Performance, wenn man ihn unbedacht anwendet.

                                                                                  Wusste ich nicht, im Manual wird konkret darauf bestanden,
                                                                                  nach jeder file_exists() Abfrage.

                                                                                  Quelle? Die englische Version sagt nichts von "muß man". Und das fragliche Szenario hielte ich auch nicht für relevant.

                                                                                  Besser wäre allerdings, auf file_exists() zu verzichten (und damit auf die Abhängigkeit von diesem Cache), und stattdessen fopen() und fpassthru() zu verwenden. fopen() wird scheitern, wenn die Datei nicht existiert oder aus sonst einem Grunde nicht gelesen werden kann - das kann man dann genauso abfangen.

                                                                                  // Durch die ungeprüfte Weiterreichung von $pic ergibt sich an dieser Stelle ggf. Angriffspotential auf den Benutzerbrowser.
                                                                                  »»
                                                                                  Wüsste jetzt nicht was ich da noch prüfen sollte ?

                                                                                  Aus der Doku zu header():
                                                                                  "Note: Since PHP 4.4.2 and PHP 5.1.2 this function prevents more than one header to be sent at once as a protection against header injection attacks."

                                                                                  Das bedeutet, dass header() durch in $pic eingeschleppte Zeilenschaltungen in früheren Versionen zum Absenden zusätzlicher Header gebracht werden konnte.

                                                                                  Gewiß ist es unwahrscheinlich, dass man in $pic sowohl einen manipulierten zusätzlichen Header als auch gleichzeitig einen gültigen Dateinamen haben kann, die Anmerkung sollte daher allgemein als Warnung verstanden werden. Man hat schon Pferde vor der Apotheke kotzen sehen.

                                                                                  readfile($bildpfad.$pic);
                                                                                  exit(); // keine weitere Ausgabe

                                                                                  // Das Skript wird nur dann abgebrochen, wenn tatsächlich erfolgreich ein Bild gefunden und ausgegeben wurde. In allen anderen Fällen läuft das Skript bei einem Request nach einem Bild weiter in den HTML-generierenden Teil.

                                                                                  Nein soll es nicht, Habe da schon die verrücktesten Sachen
                                                                                  bei den Vor zurück und reload Funktionen des Browsers erlebt.

                                                                                  Worauf bezieht sich das "Nein, soll es nicht"? Das Skript läuft in den HTML-Teil, wenn der gesetzte Parameter kein existierendes Bild beschreibt. Ist eine Unschönheit.

                                                                                  - Sven Rautenberg

                                                                                  --
                                                                                  "Love your nation - respect the others."
                                                                                  1. Das ist leider sehr häufig das Problem: Es wird nur entwickelt, bis es funktioniert, und auch nur geprüft, dass es funktioniert, wenn alles korrekt läuft. Fehlerkonditionen geraten gerne aus dem Blickfeld.

                                                                                    Können aber auch zur endlosschleife werden,
                                                                                    weil es immer wieder etwas zu finden gibt dass
                                                                                    man noch besser machen könnte.

                                                                                    zb. Ich persönlich würde aus diesem ganzen Script
                                                                                    hier eine eigene Class machen, aber für Jemand
                                                                                    wie Phil wäre der Lerneffekt dann = 0.

                                                                                    Extrem nervig, wie ich finde. Verseucht den globalen Variablenraum mit unnötigen Variablen, deren sinnvolle Neubezeichnung man sich auch noch ausdenken muß - und an die man sich an anderer Stelle, wo es um den gleichen Wert geht, wieder erinnern muß.

                                                                                    Sobald es daran geht array Variabeln wieder in html einzubinden
                                                                                    ist Übersichtlichkleitsgewinn hierdurch enorm.
                                                                                    Zumal das integrieren auch einfacher ist anstatt die
                                                                                    Strings zu trennen oder mit geschweiften { zu arbeiten.
                                                                                    Die angesprochne Resourcenverschwendung befindet sich
                                                                                    im kaum messbaren Bereich.

                                                                                    Was ist, wenn in $_GET['pic'] etwas drinsteht, was PHP zu "false" evaluiert? Der String "0" beispielsweise fällt darunter.

                                                                                    Dann kann es getrost ignoriert werden, es sei denn man
                                                                                    rechnet damit, was aber speziell in diesem Fall zu
                                                                                    ignorieren wäre.

                                                                                    $pic = stripslashes($pic);
                                                                                    // Das darf nur passieren, wenn magic_quotes_gpc auf ON steht.

                                                                                    Ok, könnte man auch noch abfragen.

                                                                                    Ersetze "könnte man" durch "muß man".

                                                                                    Das verstehe ich nicht, warum ein Muß ?

                                                                                    // Der Aufruf von clearstatcache() an dieser Stelle ist mehr als sinnlos - er kostet bei Dateimetadatenoperationen (die du nicht benutzt) auch richtig Performance, wenn man ihn unbedacht anwendet.

                                                                                    Quelle? Die englische Version sagt nichts von "muß man". Und das fragliche Szenario hielte ich auch nicht für relevant.

                                                                                    Stimmt, weiss nicht ob es so jemals in einem alten
                                                                                    Manual drinstand, hatte es aber so aufgenommen und
                                                                                    immer benenutzt.

                                                                                    Von der Performanceeinbusse steht im Manul nichts, eben genau
                                                                                    umgekehrt, deshalb wird ja clearstatcache empfohlen,´aber erst beim mehrmaligen Aufruf für eine Datei.

                                                                                    readfile($bildpfad.$pic);
                                                                                    exit(); // keine weitere Ausgabe

                                                                                    // Das Skript wird nur dann abgebrochen, wenn tatsächlich erfolgreich ein Bild gefunden und ausgegeben wurde. In allen anderen Fällen läuft das Skript bei einem Request nach einem Bild weiter in den HTML-generierenden Teil.

                                                                                    Worauf bezieht sich das "Nein, soll es nicht"? Das Skript läuft in den HTML-Teil, wenn der gesetzte Parameter kein existierendes Bild beschreibt. Ist eine Unschönheit.

                                                                                    »

                                                                                    So ist dieses Script bereits aufgebaut.
                                                                                    Eine if else regelt das hier.
                                                                                    Einzige Ausnahme der Aufruf als Bild, hier soll
                                                                                    unter keinen Umständen das Script weiterlaufen.
                                                                                    Soll ja nur das Bild angezeigt werden. Und wenn das
                                                                                    nicht klappt kommt die Ausgabe gar nicht zum tragen.
                                                                                    Also bereits 100% gelöst.

                                                                                    Probier es aus.

                                                                                    1. Moin!

                                                                                      Was ist, wenn in $_GET['pic'] etwas drinsteht, was PHP zu "false" evaluiert? Der String "0" beispielsweise fällt darunter.

                                                                                      Dann kann es getrost ignoriert werden, es sei denn man
                                                                                      rechnet damit, was aber speziell in diesem Fall zu
                                                                                      ignorieren wäre.

                                                                                      Fehlerkonditionen zu ignorieren ist aber nicht die feine englische Art.

                                                                                      Zumal du ein Stück weiter unten ja den Extra-Aufwand zum korrekten Auslesen des Verzeichnisses in der while-Schleife gemacht hast.

                                                                                      Warum ist also hier ein String wie "0" egal, während er beim Auslesen des Verzeichnisses eben gerade nicht egal ist?

                                                                                      Wenn schon schlampig, dann bitte überall gleich. Oder eben auch nicht.

                                                                                      $pic = stripslashes($pic);
                                                                                      // Das darf nur passieren, wenn magic_quotes_gpc auf ON steht.

                                                                                      Ok, könnte man auch noch abfragen.

                                                                                      Ersetze "könnte man" durch "muß man".

                                                                                      Das verstehe ich nicht, warum ein Muß ?

                                                                                      Weil PHP seine Standardeinstellungen so nach und nach ändert. Das Ändern von register_globals solltest du mitbekommen haben - in der Folge gibts viele Provider, die das wieder auf on setzen, weil sonst zuviele Kunden über nicht funktionierende Skripte meckern, aber es gibt auch genügend Provider, denen Sicherheit für ihre Kunden wichtiger ist, und die das auf off haben.

                                                                                      Das gleiche gilt für magic_quotes_gpc! stripslashes() bedingungslos anzuwenden ist einfach falsch.

                                                                                      // Der Aufruf von clearstatcache() an dieser Stelle ist mehr als sinnlos - er kostet bei Dateimetadatenoperationen (die du nicht benutzt) auch richtig Performance, wenn man ihn unbedacht anwendet.

                                                                                      Von der Performanceeinbusse steht im Manul nichts, eben genau
                                                                                      umgekehrt, deshalb wird ja clearstatcache empfohlen,´aber erst beim mehrmaligen Aufruf für eine Datei.

                                                                                      Sorry, aber ein Cache ist dazu da, einmal und zeitaufwendig festgestellte Ergebnisse für die erneute Verwendung mit erheblich höherer Performance liefern zu können.

                                                                                      Der stat-Cache tut dies bei PHP für Dateimetainformationen. Wenn du den Cache löschst - und zwar bei jedem Bild erneut - dann wird der Cache effektiv eliminiert und kann seinen beschleunigenden Zweck nicht mehr erfüllen.

                                                                                      Also kostet es Performance.

                                                                                      Irgendwas hast du da nicht richtig verstanden.

                                                                                      Worauf bezieht sich das "Nein, soll es nicht"? Das Skript läuft in den HTML-Teil, wenn der gesetzte Parameter kein existierendes Bild beschreibt. Ist eine Unschönheit.

                                                                                      So ist dieses Script bereits aufgebaut.

                                                                                      Nein. Schau noch mal genau die Schachtelung der IFs an.

                                                                                      Eine if else regelt das hier.

                                                                                      Das exit() wird nur dann ausgeführt, wenn $_GET['pic'] Inhalt hat _und_ die Bilddatei existiert.

                                                                                      Wenn die Bilddatei nicht existiert, landet man bei if (!file_exists...) in der Ausgabe von echo '<h1>DATEI NICHT GEFUNDEN</h1>', danach wird exit() eben gerade nicht aufgerufen, und es kommt zur Generierung der Galerie. Trotz gesetzem Parameter für pic, der ja bedeutet, dass ein Bildaufruf erfolgt ist.

                                                                                      Einzige Ausnahme der Aufruf als Bild, hier soll
                                                                                      unter keinen Umständen das Script weiterlaufen.

                                                                                      Genau diese Ausnahme ist nicht erfüllt.

                                                                                      Soll ja nur das Bild angezeigt werden. Und wenn das
                                                                                      nicht klappt kommt die Ausgabe gar nicht zum tragen.
                                                                                      Also bereits 100% gelöst.

                                                                                      Eben nicht.

                                                                                      Probier es aus.

                                                                                      Bitte selbst probieren.

                                                                                      - Sven Rautenberg

                                                                                      --
                                                                                      "Love your nation - respect the others."
                                                                  2. habe d'ehre Sven

                                                                    Was ist mit parallelen Zugriffen? User 2 löscht das Bild, was User 1 gerade generiert, aber noch nicht abgerufen hat.

                                                                    Koennte man wie bei Typo3 loesen: Die Bilder werden nie aus der Original-Resource aufgerufen, sondern aus fileadmin/upload  und mit einer durchnummerierten Suffix, wenn ein Bild auf mehreren Seiten verwendet wird. (bildname.jpg, bildname_01.jpg, bildname_02.jpg usw.)

                                                                    Ich sehe hier nur das Problem, wie der ganze erzeugte Datenmuell zeitnah automatisiert geloescht werden koennte. Evtl. mittels eines Cronjobs alle 24 Std., aber wenn schon .htaccess nicht zur Verfuegung steht. ;-)

                                                                    BTW: Der Thread-Ast wird mittlerweile auch bei 1680 Breite und Vollbild schwierig zu verfolgen. :-) Ich harre spannend der weiteren Entwicklung.

                                                                    man liest sich
                                                                    Wilhelm

                                                                2. echo $begrüßung;

                                                                  Nein, brauchen wir nicht. Ein Script, das einen übergebenen Parameter als Dateinamen interpretiert, bzw. einen daraus macht, und bei Berechtigung die Daten dieser Datei ausliefert. Diese Lösung war ja im Laufe des Thread schon mal (zumindest teilweise) vorhanden. Deren Aufruf muss nur in das img-Element eingebunden werden.

                                                                  Soso, dann erklär uns dochmal wie das gehen soll.

                                                                  Parameterübergabe und -übernahme in einem PHP-Script ist ein Thema, das jedem Anfänger über den Weg läuft, denn das ist der Hauptzweck PHPs. Bestandteil einer URL ist der Querystring, dem man name=value-Paare übergeben kann, die recht einfach in PHP abzufragen sind (Stichwort $_GET). Einen solchen Parameter bei entsprechender Erlaubnis einem readfile()-Aufruf zu übergeben solltest selbst du hinbekommen. Wie gesagt, war diese Lösung, bei Scriptaufruf eine Bilddatei auszuliefern schon in diesem Thread aufgetaucht, nur ohne die Parametergeschichte.

                                                                  Zu beachten dabei ist, dass dieser übergebene Parameter nicht einfach so an eine Dateizugriffsfunktion übergeben werden sollte. Wenn jemand in der Lage ist, .. und / als Bestandteil zu übergeben kann er sich unbeabsichtigten Zugriff auf Dateien verschaffen. Also sollte vorher geprüft werden, dass .. und / nicht enthalten sind.
                                                                  Eine andere Möglichkeit wäre, statt eines Dateinamen z.B. eine Zahl mitzugeben, die dann in einer Übersetzungsliste (z.B. ein Array) auf einen Dateinamen zeigt. Jedoch ist dies mit Pflegeaufwand der Übersetzungsliste verbunden, und nicht unbedingt zweckmäßig bei sich häufig änderndem Downloadverzeichnisinhalt.

                                                                  Allgemein ist diese Vorgehensweise hier im Forum zu
                                                                  kritisieren. Meckern Ja, Konkrete Vorschläge, Nein.

                                                                  Hör doch bitte auf, hier rumzunörgeln. Wenn dir dieses Forum und seine Mitbewohner nicht passen, kannst du dir gern ein anderes suchen. Diese Nörgelei ist genauso wenig fundiert wie deine bisherigen fachlichen Antworten.

                                                                  echo "$verabschiedung $name";

                                                                  1. Hör doch bitte auf, hier rumzunörgeln. Wenn dir dieses Forum und seine Mitbewohner nicht passen, kannst du dir gern ein anderes suchen. Diese Nörgelei ist genauso wenig fundiert wie deine bisherigen fachlichen Antworten.

                                                                    Hochmut kommt vor dem Fall.

                                                                    Wie ich auch schon Sven versucht habe zu erklären,
                                                                    kommt man hier nicht mit Readfile weiter (insbesondere war ich der
                                                                    erste in diesem Thread hier der darauf hingewiesen hat).

                                                                    Ihr versteht nicht was Phil eigentlich will.

                                                                    1. echo $begrüßung;

                                                                      Wie ich auch schon Sven versucht habe zu erklären,
                                                                      kommt man hier nicht mit Readfile weiter (insbesondere war ich der
                                                                      erste in diesem Thread hier der darauf hingewiesen hat).

                                                                      Deine Umkopierlösung wirft mehr Probleme auf, als sie löst. Diese wurden sowohl von Sven als auch von mir angesprochen.

                                                                      Nochmal langsam und von vorn, das was ich dir versuchte stattdessen zu verwenden:
                                                                      Ein Script seite_mit_bild.php liefert den HTML-Quelltext aus, der unter anderem einen Verweis auf eine Bild-Ressource enthält <img src="bildleser.php?zielbild=wasauchimmer.jpg">.

                                                                      Bei dir würde seite_mit_bild.php nun noch einen Kopiervorgang auslösen, der wasauchimmer.jpg für eine gewisse Zeitspanne öffentlich zugänglich macht, wenn seite_mit_bild.php die User-Prüfung erfolgreich absolviert hat. Statt <img src="bildleser.php?zielbild=wasauchimmer.jpg"> stünde <img src="tmp/wasauchimmer.jpg"> in deiner Ausgabe von seite_mit_bild.php.

                                                                      In der bildleser-Lösung wird in bildleser.php ebenfalls die User-Prüfung vorgenommen und daraufhin das Bild wasauchimmer.jpg ausgeliefert oder ein Bild mit "Zugriff verweigert" als Inhalt. Dies geschieht mit den für das jeweilige Bildformat passenden HTTP-Headern, damit der Browser nicht raten muss, was da auf ihn zukommt. Die ausgelieferten Bild-Daten müssen dazu nicht irgendwo hinkopiert werden, sondern werden mit readfile() direkt auf die Anforderung von "bildleser.php?zielbild=wasauchimmer.jpg" durch den Browser ausgeliefert. Das Umkopieren und das damit verbundene Garbage-Collection-Problem entfällt. Nur die angesprochene Prüfung auf .. und / in dem statt "wasauchimmer.jpg" übergebenen Wert sollte eingebaut werden.

                                                                      echo "$verabschiedung $name";

                                                                      1. Die ausgelieferten Bild-Daten müssen dazu nicht irgendwo hinkopiert werden, sondern werden mit readfile() direkt auf die Anforderung von "bildleser.php?zielbild=wasauchimmer.jpg" durch den Browser ausgeliefert. Das Umkopieren und das damit verbundene Garbage-Collection-Problem entfällt. Nur die angesprochene Prüfung auf .. und / in dem statt "wasauchimmer.jpg" übergebenen Wert sollte eingebaut werden.

                                                                        Auch für dich noch einmal:

                                                                        <html>
                                                                        <head>
                                                                        <title>Galeria</title>
                                                                        </head>
                                                                        <body>
                                                                        <img src="bild1.jpg">
                                                                        <img src="bild2.jpg">
                                                                        <img src="bild3.jpg">
                                                                        <img src="bild4.jpg">
                                                                        </body>
                                                                        </html>

                                                                        Sowas möchte er ausgeben, das geht nicht mit readfile().
                                                                        Direkte Bildpfade gehen auch nicht, weil oberhalb von root.

                                                                        1. Moin!

                                                                          <img src="bild1.jpg">
                                                                          <img src="bild2.jpg">
                                                                          <img src="bild3.jpg">
                                                                          <img src="bild4.jpg">

                                                                          Sowas möchte er ausgeben, das geht nicht mit readfile().

                                                                          Und auch nicht mit include(). Sondern nur, indem man die Bilder für alle erreichbar und ohne Passwortschutz in den online erreichbaren Bereich packt.

                                                                          Und genau das will er ja nun auch wieder nicht.

                                                                          - Sven Rautenberg

                                                                          --
                                                                          "Love your nation - respect the others."
                                                                          1. Und auch nicht mit include(). Sondern nur, indem man die Bilder für alle erreichbar und ohne Passwortschutz in den online erreichbaren Bereich packt.

                                                                            »»

                                                                            Natürlich auch nicht mit include.
                                                                            Na wenigstens akzeptiert ihr das jetzt schon mal,
                                                                            dass readfile und alle anderen einlesbaren Methoden hier
                                                                            ausscheiden.

                                                                            Und genau das will er ja nun auch wieder nicht.

                                                                            Nein will er nicht, daher temporäre Files.
                                                                            Eine Lösung, die Ihn offensichtlich zufriedenstellt.
                                                                            Aber ich höre mir natürlich gerne eine bessere Lösung an.
                                                                            Nur fällt mir keine Alternative dazu ein, euch?
                                                                            Stattdessen höre ich immer wieder readfile, readfile,...

                                                                            1. Moin!

                                                                              Und genau das will er ja nun auch wieder nicht.

                                                                              Nein will er nicht, daher temporäre Files.
                                                                              Eine Lösung, die Ihn offensichtlich zufriedenstellt.

                                                                              Weil du keine bessere Methode vorgestellt hast, und nicht diskutiert hast, welche Nachteile sie mit sich bringt.

                                                                              Aber ich höre mir natürlich gerne eine bessere Lösung an.

                                                                              Die wurde dir hier ja vorgestellt.

                                                                              Nur fällt mir keine Alternative dazu ein, euch?
                                                                              Stattdessen höre ich immer wieder readfile, readfile,...

                                                                              Richtig. Weil es darum geht, exakt den einzelnen HTTP-Request auf das Bild abzufangen. Es nützt nichts (insbesondere nicht, wenn man nicht aufräumt), irgendwohin temporäre Datein zu kopieren. Bzw. nützt das natürlich schon was für den Zugriff, aber nicht für die gewünschte Sicherheit.

                                                                              Phil hätte am liebsten die .htaccess-Methode genutzt, die ihm sein Server aber nicht anbietet. Also bastelt er sich etwas gleichwertiges mit PHP.

                                                                              Das, was du ihm da gebastelt hast, ist aber nichts gleichwertiges. Und du scheinst auch nicht zu verstehen, was dedlfix' oder mein Ansatz macht.

                                                                              - Sven Rautenberg

                                                                              --
                                                                              "Love your nation - respect the others."
                                                                              1. Moin Zusammen

                                                                                Wollte mich auch wieder mal zu Wort melden. Dank der grossen Hilfe konnte ich mir selbst eine Lösung aus den vielen Ansätzen zusammenbasteln. Meine Gallery wird nun durch 2 Dateien geschützt. Die beiden Dateien liegen in einem frei zugänglichen Ordner, in welchem auch eine kleine Bildervorschau generiert ( Datei 1 ) wird ( Bilder sind 50 Pixel breits, daher fast nichts zu erkennen ) nun werden die Variablen an Datei 2 weitergegen welcher die die Bilder ausserhalb des Root Verzeichnis aufruft und anzeigt! Somit können die Bilder nur mit den beiden PHP Dateien angschaut werden. Perfekt!

                                                                                Datei 1:
                                                                                <?php
                                                                                $fh = opendir("./");
                                                                                $verzeichnisinhalt = array();
                                                                                while (true == ($file = readdir($fh)))
                                                                                {
                                                                                        if ((substr(strtolower($file), -3)=="jpg") or (substr(strtolower($file), -3)=="gif"))
                                                                                        {
                                                                                            $verzeichnisinhalt[] = $file;
                                                                                        }
                                                                                }
                                                                                for($i=0;$i<count($verzeichnisinhalt);$i++)
                                                                                    echo "<a href=./img.php?var=$verzeichnisinhalt[$i]><img src='./".$verzeichnisinhalt[$i]."' height=110 border=0 ></img></a>";
                                                                                }
                                                                                ?>

                                                                                Datei 2:
                                                                                <?php
                                                                                $path = getcwd();
                                                                                $name = substr($path, 50);
                                                                                $slash ='/';
                                                                                $path = '../../../../../../data/';
                                                                                $bild = ($_GET['var']);
                                                                                $pic = file_get_contents($path.$name.$slash.$bild);
                                                                                echo $pic;
                                                                                ?>

                                                                                Nochamls Danke für die Hilfe!

                                                                                1. echo $begrüßung;

                                                                                  Wenigstens du hast verstanden, wie die Lösung funktioniert.

                                                                                  Datei 2:
                                                                                  <?php
                                                                                  $path = getcwd();
                                                                                  $name = substr($path, 50);
                                                                                  $slash ='/';
                                                                                  $path = '../../../../../../data/';
                                                                                  $bild = ($_GET['var']);
                                                                                  $pic = file_get_contents($path.$name.$slash.$bild);
                                                                                  echo $pic;
                                                                                  ?>

                                                                                  Die Zugriffskontrolle ist hier aber nicht enthalten. Die solltest du noch einbauen, sonst ist das ganze Vorhaben ja witzlos, weil man img.php?var=irgendwas.jpg ja auch direkt aufrufen kann.

                                                                                  Auch ist das von mir erwähnte Sicherheitsproblem in diesem Code nicht gelöst. Wenn jemand nicht nur einfach in der Ausgabe von Datei 1 klickt, sondern img.php?var=... direkt aufruft, kann man sich nun recht einfach im Verzeichnisbaum bewegen und beliebige Dateien lesen (so sie der scriptausführende User lesen darf).

                                                                                  Solche

                                                                                  img.php?var=../../../etc/passwd

                                                                                  und ähnliche Zugriffe meine ich. Deswegen empfahl ich, wenn .. und / in $_GET['var'] enthalten ist, die weitere Auslieferung der Datei zu unterbinden.

                                                                                  Auch sollte überprüft werden, ob die Datei unter $path.$name.$slash.$bild existiert. Nicht dass veraltete Links Fehlzugriffe erzeugen. Durch die angezeigten Fehlermeldungen (und die darin enthaltenen Pfadangaben) kann man prima Rückschlüsse auf Gegebenheiten des Dateisystems ziehen.

                                                                                  Wie ebenfalls erwähnt wurde, fehlt die Ausgabe eines passenden Content-Type-Headers. Nicht alle Browser bemühen sich eine mit  text/html ausgelieferte Bildressource als solche zu erkennen.
                                                                                  Ein
                                                                                  header("Content-type: image/jpeg");
                                                                                  oder
                                                                                  header("Content-type: image/png");
                                                                                  oder
                                                                                  header("Content-type: image/gif");
                                                                                  ist _kein_ überflüssiger Luxus sondern Notwendigkeit, möchte man ein funktionierendes Script haben.

                                                                                  Und noch eine Kleinigkeit:

                                                                                  $bild = ($_GET['var']);

                                                                                  Die runden Klammern sind hier überflüssig.

                                                                                  echo "$verabschiedung $name";

                                                                                2. Moin!

                                                                                  Wollte mich auch wieder mal zu Wort melden. Dank der grossen Hilfe konnte ich mir selbst eine Lösung aus den vielen Ansätzen zusammenbasteln.

                                                                                  Naja, Lösung... ich weiß nicht so recht, deiner Lösung fehlt es am Essentiellen: Dem Zugriffsschutz für die, die die Bilder nicht sehen sollen.

                                                                                  Meine Gallery wird nun durch 2 Dateien geschützt. Die beiden Dateien liegen in einem frei zugänglichen Ordner, in welchem auch eine kleine Bildervorschau generiert ( Datei 1 ) wird ( Bilder sind 50 Pixel breits, daher fast nichts zu erkennen ) nun werden die Variablen an Datei 2 weitergegen welcher die die Bilder ausserhalb des Root Verzeichnis aufruft und anzeigt! Somit können die Bilder nur mit den beiden PHP Dateien angschaut werden. Perfekt!

                                                                                  Die Abwesenheit von Zugriffsschutz interessiert dich plötzlich nicht mehr?

                                                                                  Datei 1:
                                                                                  <?php
                                                                                  $fh = opendir("./");

                                                                                  Du öffnest das aktuelle Verzeichnis.

                                                                                  $verzeichnisinhalt = array();
                                                                                  while (true == ($file = readdir($fh)))
                                                                                  {
                                                                                          if ((substr(strtolower($file), -3)=="jpg") or (substr(strtolower($file), -3)=="gif"))
                                                                                          {
                                                                                              $verzeichnisinhalt[] = $file;
                                                                                          }
                                                                                  }

                                                                                  Du liest alle Dateien, die auf "jpg" oder "gif" enden, ein.

                                                                                  for($i=0;$i<count($verzeichnisinhalt);$i++)
                                                                                      echo "<a href=./img.php?var=$verzeichnisinhalt[$i]><img src='./".$verzeichnisinhalt[$i]."' height=110 border=0 ></img></a>";
                                                                                  }

                                                                                  Du generierst einen Link mit Bildinhalt. Auf das Bild kann direkt zugegriffen werden, der Link führt zu deinem zweiten Skript.

                                                                                  Zugriffsschutz? Fehlanzeige! Diese Galerieübersicht kriegt jeder.

                                                                                  Datei 2:
                                                                                  <?php
                                                                                  $path = getcwd();

                                                                                  Du definierst dir das aktuelle Verzeichnis in $path.

                                                                                  $name = substr($path, 50);

                                                                                  Du schneidest willkürlich (eventuell passend für deine derzeitige Konfiguration und Verzeichnisbezeichnung) 50 Zeichen vom Pfad ab.

                                                                                  $slash ='/';
                                                                                  $path = '../../../../../../data/';

                                                                                  Du definierst $pfad neu mit vielen Slashes.

                                                                                  $bild = ($_GET['var']);

                                                                                  Du übernimmst unkritisch den per Parameter übernommenen Bildnamen.

                                                                                  $pic = file_get_contents($path.$name.$slash.$bild);
                                                                                  echo $pic;

                                                                                  Du liest den Dateiinhalt der Bilddatei (sofern sie denn tatsächlich existiert, den identischen Namen zu ihrem Vorschaubild hat, und vom Browser auch als Bilddatei erkannt wird) in eine Variable und gibst diese aus.

                                                                                  Gleichfalls gilt auch hier: Wer die URL aus dem Link kennt, kann das Bild abrufen. Den gleichen Effekt hast du, wenn du deine Bilder direkt zum ungeschützten Zugriff in ein Verzeichnis innerhalb von DOCUMENT_ROOT stellst.

                                                                                  Mit anderen Worten: Warum der Aufwand für den ganzen Kram, wenn du doch nichts geändert hast, außer Rechenzeit für die PHP-Skripte zu verbraten?

                                                                                  - Sven Rautenberg

                                                                                  --
                                                                                  "Love your nation - respect the others."
                                                                              2. Das, was du ihm da gebastelt hast, ist aber nichts gleichwertiges. Und du scheinst auch nicht zu verstehen, was dedlfix' oder mein Ansatz macht.

                                                                                Na versuchen wirs doch mal,
                                                                                Ihr wollt das Bild standalone ausgeben nachdem die
                                                                                Berechtigung auf den zugriff geklärt ist.

                                                                                Hmm hatte ich das nicht bereits am Anfang des threads
                                                                                so vorgestellt?

                                                                                Ok Phil,
                                                                                du willst also Berechtigungen für Bilder setzen.

                                                                                Dann sollte aber readfile() vollkommen ausreichen für deine
                                                                                Zwecke, die Kontrolle übernimmt ja dein Script.

                                                                                if($user=='wolke'){readfile(images/bild1.jpg);}
                                                                                else{die('DU BIST NICHT WOLKE');}

                                                                                Natürlich kämen da noch Headerangaben dazu, wenn er es
                                                                                so wollte. ABER SO WILL ER ES NICHT.

                                                                                #####################################

                                                                                Oder habe ich euch wirklich nicht verstanden, und ihr
                                                                                hattet eine andere Lösung?

                                                                        2. echo $begrüßung;

                                                                          Die ausgelieferten Bild-Daten müssen dazu nicht irgendwo hinkopiert werden, sondern werden mit readfile() direkt auf die Anforderung von "bildleser.php?zielbild=wasauchimmer.jpg" durch den Browser ausgeliefert. Das Umkopieren und das damit verbundene Garbage-Collection-Problem entfällt. Nur die angesprochene Prüfung auf .. und / in dem statt "wasauchimmer.jpg" übergebenen Wert sollte eingebaut werden.

                                                                          Auch für dich noch einmal:

                                                                          <html>
                                                                          <head>
                                                                          <title>Galeria</title>
                                                                          </head>
                                                                          <body>
                                                                          <img src="bild1.jpg">
                                                                          <img src="bild2.jpg">
                                                                          <img src="bild3.jpg">
                                                                          <img src="bild4.jpg">
                                                                          </body>
                                                                          </html>

                                                                          Sowas möchte er ausgeben, das geht nicht mit readfile().

                                                                          Richtig. An dieser Stelle soll es ja auch gar nicht zum Einsatz kommen.

                                                                          Entweder legt er seine Bilder öffentlich ab, dass er mittels bild1.jpg usw. darauf zugreifen kann, oder überlässt das Ausliefern einem Script, das den Dateiinhalt ausliefert.

                                                                          Direkte Bildpfade gehen auch nicht, weil oberhalb von root.

                                                                          Deswegen soll das Ausliefern der Bilddateiinhalte auch ein Script übernehmen, das auf dieses Oberhalb-Documentroot-Verzeichnis zugreifen darf.

                                                                          <html>
                                                                          <head>
                                                                          <title>Galeria</title>
                                                                          </head>
                                                                          <body>
                                                                          <img src="bildleser.php?zielbild=bild1.jpg">
                                                                          <img src="bildleser.php?zielbild=bild2.jpg">
                                                                          <img src="bildleser.php?zielbild=bild3.jpg">
                                                                          <img src="bildleser.php?zielbild=bild4.jpg">
                                                                          </body>
                                                                          </html>

                                                                          Und bildleser.php prüft auf Erlaubnis, liefert dann einen HTTP-Header, und mit einem readfile()-Zugriff auf
                                                                            $Oberhalb_Documentroot_Verzeichnis . '/' . $_GET['zielbild']
                                                                          den Inhalt der Bilddatei aus. (Hinzu kommt noch die Prüfung auf .. und / und auf Existenz der auszuliefernden Datei.)

                                                                          echo "$verabschiedung $name";

                                                        2. echo $begrüßung;

                                                          Jetzt hast du natürlich ein Duplikat deines Bildes auf dem Server
                                                          liegen, das muss noch weg, entweder in regelmässigen Intervallen,
                                                          oder falls der User durch Session reinkam, nach session Ende,

                                                          Könntest du diese Möglichkeit bitte zu Ende denken, bevor du sie hier verbreitest. Wie sieht ein "Sessionende" aus? Was passiert, wenn der Benutzer seinen Browser schließt, ohne einen Logout-Mechanismus betätigt zu haben?

                                                          oder wie auch immer, tausend Möglichkeiten.

                                                          Diese Alternative nützt einem Anfänger gar nichts, weil er diese Möglichkeiten nicht kennt.

                                                          echo "$verabschiedung $name";

                                                2. Moin!

                                                  Nur, kleine Frage, kann ich diesen Code in keine PHP Datei einfügen, in der auch noch weiterer Quelltext steht? Muss die Datei mit deinem Code immer leer sei`n?

                                                  Langsam, langsam.

                                                  Der Grund, warum das geht ist weil der Browser automatisch erkennt,
                                                  dass es ein Bild ist.

                                                  Entferne "Browser", ersetze mit "Internet Explorer".

                                                  Alle anderen Browser vertrauen dem gesendeten Content-Type des Servers, und zeigen "text/html" (den Standardtyp von PHP-Skript-Seiten) eben als Text an.

                                                  Mit Leerzeichen wertet er das als HTML/TEXT

                                                  Leerzeichen haben natürlich im Binärdatenstrom eines Bildes nichts zu suchen, das ist richtig.

                                                  Also auch nicht mehr include, sondern

                                                  Gott sei Dank! Include fliegt wieder raus!

                                                  Das ist nämlich absolut schwachsinnig, ein Bild enthält keinen ausführbaren PHP-Code - normalerweise jedenfalls nicht. Allerdings schon, wenn ein Benutzer ein PHP-Skript hochlädt, was er wie ein Bild benennt.

                                                  Also bitte verinnerlichen: Verwende include() oder require() nur dann, wenn es tatsächlich darum geht, ausführbaren PHP-Code einzubinden. In allen anderen Fällen ist readfile() die bessere Alternative.

                                                  - Sven Rautenberg

                                                  --
                                                  "Love your nation - respect the others."
                                            2. hi,

                                              Jeine riesen Menge an Buchstaben und Zahlen angezeigt...
                                              Ja, das bedeutet du hast doch noch Leerzeichen oder sonstwas
                                              im script.

                                              Nein, das bedeutet, daß weder fopen() noch readfile() noch include() etwas mit dem Bild anfangen können. Das "Problem" ist schließlich auch kein PHP-Problem, sondern ganz einfach die Fragfe, wie  das infrage kommende Bild in die HTML-Seite eingebunden wird.

                                              Der Browser zeigt dir das Biild so an wie wenn du
                                              es mit einem Texteditor anseehen würdest.

                                              Nein. Der Browser zeigt die Daten so an, wie sie der Server übermittelt. Und da das Bild vom Script vorher zerhackstückt wird, bekommt er eben keine anderen Daten. Und vor allem kein Bild.

                                              Grüße aus Berlin

                                              Christoph S.

                                              --
                                              Visitenkarte
                                              ss:| zu:) ls:& fo:) va:) sh:| rl:|
                                              1. Nein, das bedeutet, daß weder fopen() noch readfile() noch include() etwas mit dem Bild anfangen können. Das "Problem" ist schließlich auch kein PHP-Problem, sondern ganz einfach die Fragfe, wie  das infrage kommende Bild in die HTML-Seite eingebunden wird.

                                                Du irrst, jeder aktuelle Browser kann ein Bild auch
                                                standalone anzeigen.

                                          2. Hallo Phil,

                                            Jetzt kommen wir doch der Sache schon ziemlich Nahe! Der Aufbau der Seite funktioniert nun sehr schnell, nur wird anstatt des Bildes eine riesen Menge an Buchstaben und Zahlen angezeigt...

                                            Du wirst dem Browser noch sagen müssen, dass da ein Bild kommt - bei einen jpg-Bild muss also noch ein header('Content-Type: image/jpeg'); vor die Ausgabe des Bildes.

                                            Grüße aus Nürnberg
                                            Tobias

                                        2. Hallo Wolke,

                                          jetzt ersetze readfile bitte durch include

                                          Warum? Phil will ein Bild an den Browser durchreichen, und da ist readfile() genau richtig, include dagegen aber völliger Unsinn, da damit Code eingebunden und ausgeführt wird ...

                                          Grüße aus Nürnberg
                                          Tobias

                                    2. hallo Wolke,

                                      readfile($path.$bild);

                                      readfile() ist hier genauso unsinnig wie fopen().

                                      Es geht einzig darum, daß ein paar Bilder (vielleicht die der Freundin am FKK-Strand) eben nicht öffentlich zugänglich sein sollen. Das ist verständlich. Aber genau das war bereits Inhalt von Phils altem Thread. An der Substanz seiner Nachfrage hat sich nichts geändert, auch wenn er den Titel neu gewählt hat - also wars sehr wohl ein Doppelposting.

                                      Leider will Phil auf eine sehr tapfere Weise nicht einsehen, daß das, was er gerne möchte, auf den Wegen, die mit ihm bisher diskutiert wurden, nicht erreichbar ist.

                                      Grüße aus Berlin

                                      Christoph S.

                                      --
                                      Visitenkarte
                                      ss:| zu:) ls:& fo:) va:) sh:| rl:|
                                  3. Hallo Phil,

                                    Jedoch sind nicht alle Optionen wie bei normalen Apache Servern verfügbar! ( eben u.a. htaccess )

                                    Bist du sicher, dass AllowOverride nicht einfach auf None gesetzt ist? Wenn du Zugriff auf die Konfiguration des Apachen hast, steht es dir doch frei das zu ändern oder die Einstellungen die in der .htaccess stehen würden gleich in die httpd.conf einzutragen ...

                                    Grüße aus Nürnberg
                                    Tobias

                                    1. Hallo Tobias,

                                      Jedoch sind nicht alle Optionen wie bei normalen Apache Servern verfügbar! ( eben u.a. htaccess )
                                      Bist du sicher, dass AllowOverride nicht einfach auf None gesetzt ist? Wenn du Zugriff auf die Konfiguration des Apachen hast, steht es dir doch frei das zu ändern oder die Einstellungen die in der .htaccess stehen würden gleich in die httpd.conf einzutragen ...

                                      das hatte Christoph auch schon gefragt. Was mich wirklich wundert, ist, dass vor Dir noch keiner auf die Verwendung von header() hingewiesen hat.

                                      Freundliche Grüße

                                      Vinzenz

                                    2. Hi

                                      Habe ich eben schon versucht! Leider ist keine offensichtliche conf Datei enthalten. Eine httpd.conf Datei wie bei normalen Apache ist leider nicht vorhanden. Habe natürlich auch schon versucht AllowOverride korrekt einzustellen!

                              2. hallo Phil,

                                Ich besitze einen eigenen Apache Server

                                Ich auch. Bei Bedarf sogar mehr als ein Dutzend.

                                nur läuft dieser nicht auf einem PC sondern auf einem spezial Festplatten Gehäuse

                                Hm. Das ist genau das, was ich dir in deinem anderen Thread bereits zu sagen versucht habe: der Apache ist kein automatisches Festplatten-Reinigungsgerät, das irgendwo auf einem Gehäuse herumläuft. Sowas kann er nicht. Gehäuse sind ihm völlig wurscht.

                                welches auch über LAN & WAN angesprochen werden kann

                                Du scheinst offensichtlich der aktuellen Technologie um Lichtjahre voras zu sein. LAN und WAN sind durchaus verständliche Begriffe, bisher ist denen aber ebenso wie dem Apache völlig wurscht, was für ein "Gehäuse" irgendwo um eine Festplatte herum gebaut wurde.

                                . htaccess wir leider nicht unterstützt von diesem Gehäuse

                                Da Gehäuse nix mit Apache zu tun haben, können sie auch .htaccess nicht unterstützen. Dein Apache kann das aber sehr wohl.

                                nur möchte ich sicher gehen das die Bilder wirklich nicht aufgerufen werden können.

                                Alles, was du bisher geschrieben hast, geht dahin, daß deine Bilder doch aufgerufen werden können sollen - wenn auch mit bestimmten Einschränkungen. Jetzt sagst du, daß sie nicht aufgerufen werden sollen. Prima. Lösche sie einfach von deinem Webspace, egal, wie er nun verwaltet wird, und du bist alle Sorgen los.

                                Grüße aus Berlin

                                Christoph S.

                                --
                                Visitenkarte
                                ss:| zu:) ls:& fo:) va:) sh:| rl:|
                      2. hallo Phil,

                        Mein Ziel ist es jetzt, das das Bild nicht mehr direkt über www.xxx.de/1.jpg aufgerufen werden kann!

                        Du versuchst tapfer zu ignorieren, daß das ohne einen Mechanismus wie .htaccess schlichtweg unmöglich ist.

                        Grüße aus Berlin

                        Christoph S.

                        --
                        Visitenkarte
                        ss:| zu:) ls:& fo:) va:) sh:| rl:|
              2. Hallo Phil,

                chmod 0 heisst für mich kein Write, kein execute und kein read für groups, public und owner. Also kein Zugriff.

                Wenn du für eine Datei chmod auf 000 setzt, kann _niemand_[1] mehr auf die Datei zugreifen, auch PHP nicht - die Datei wäre also perfekt gegen jeglichen Zugriff geschützt ...

                Grüße aus Nürnberg
                Tobias

                [1] bis auf root, der darf trotzdem darauf zugreifen.

          2. Ok Phil,
            du willst also Berechtigungen für Bilder setzen.

            Dann sollte aber readfile() vollkommen ausreichen für deine
            Zwecke, die Kontrolle übernimmt ja dein Script.

            if($user=='wolke'){readfile(images/bild1.jpg);}
            else{die('DU BIST NICHT WOLKE');}

            Das klappt natürlich nur, wenn Du keine andere Ausgabe im Browser
            hast, leerzeichen usw. sonst hast du wieder den Textsalat des Bildes
            anstatt das Bild selbst.

            In dem Fall musst du natürlich mit einem ordentlichen
            <img>tag arbeiten und wenn du Den Pfad nich anzeigen lassen willst
            ein temporäres File erzeugen.

            zb.
            $tmpname = 'tmp/pic12345.jpg'
            copy('images/bild1.jpg',$tmpname)

            if($user=='wolke'){echo'<img src="'.$tmpname.'"';}
            else{die('DU BIST NICHT WOLKE');}

            Aber nicht vergessen dann wieder das temporäre
            Bild irgendwann wieder zu löschen.

            Gruss

            1. Hi

              Auch eine gute Idee. Jetzt kann ich mich nicht recht entscheiden. Werde beide Methoden ein wenig testen und schauen welche besser funktioniert. Danke für die Hilfe. Schöner Abend.

              1. Wer die Wahl hat....
                Hab vergessen den IMG tag zu schliessen:
                so is richtig.

                if($user=='wolke'){echo'<img src="'.$tmpname.'">';}
                else{die('DU BIST NICHT WOLKE');}

            2. echo $begrüßung;

              Dann sollte aber readfile() vollkommen ausreichen für deine
              Zwecke, die Kontrolle übernimmt ja dein Script.

              if($user=='wolke'){readfile(images/bild1.jpg);}
              else{die('DU BIST NICHT WOLKE');}

              Das klappt natürlich nur, wenn Du keine andere Ausgabe im Browser
              hast, leerzeichen usw. sonst hast du wieder den Textsalat des Bildes
              anstatt das Bild selbst.

              readfile zum Dateiinhalt durchreichen ist soweit richtig, aber es ist nicht ausreichend. Es fehlt ein passender Content-Type-Header. Und Fehlermeldungstext anstelle eines Bildes zu senden verwirrt manche Browser, da sie den Content-Type-Wechsel beim zweiten, diesmal anzunehmenderweise autorisierten, Zugriff nicht beachten. Als Fehlermeldung ist in dem Fall ein entsprechender HTTP-Statuscode angebrachter.

              In dem Fall musst du natürlich mit einem ordentlichen
              <img>tag arbeiten und wenn du Den Pfad nich anzeigen lassen willst
              ein temporäres File erzeugen.

              $tmpname = 'tmp/pic12345.jpg'
              copy('images/bild1.jpg',$tmpname)

              if($user=='wolke'){echo'<img src="'.$tmpname.'"';}
              else{die('DU BIST NICHT WOLKE');}

              Na toll, damit kopierst du das geschützte Bild in einen ungeschützten Bereich, wo es nun durch jedermann zugreifbar ist.

              Aber nicht vergessen dann wieder das temporäre
              Bild irgendwann wieder zu löschen.

              Wann genau soll das bitte geschehen? Bei dieser Lösung wird eine Garbage Collection benötigt, die irgendwie aufgerufen werden muss.

              1. Der Browser ruft das Script auf. Das Script erzeugt seine Ausgabe und beendet sich wieder.
              2. Er findet das <img src="tmp/pic12345.jpg">
              3. Er macht einen zweiten Request, diesmal auf tmp/pic12345.jpg
              4. Und nun? Wie kommt jetzt der Garbage Collector zum Einsatz?

              echo "$verabschiedung $name";

      2. hallo Phil,

        Es geht darum, dass ich Bilder aus einem geschützten Ordner ( chmod 0 ) anzeigen möchte!

        Das ist dein bekanntes Problem mit dem "Schutz". Wie hast du das denn jetzt gelöst? Hast du dich denn von der irrigen Vorstellung verabschiedet, daß Bilder, die - auf welchem Weg auch immer - an den Browser eines Besuchers deiner Seite ausgeliefert werden, eben vor Zugriffen "geschützt" werden müßten/könnten?

        Die Bilder dürfen einzeln nicht abegrufen werden können ( www.abc.de/1.jpg ) sondern nur, wenn sie über eine PHP Datei aufgerufen werden!

        Vermutlich möchtest du dich noch einmal damit beschäftigen, was PHP mit Bildern überhaupt zu tun hat, und wie deine Bilder nun in das HTML integriert werden sollen, das dein PHP auszugeben hat.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
    2. hi,

      <?

      Das sollte man möglichst vermeiden. Richtiger ist
        <?php

      $datei_handle = fopen("kirsche.jpg", "rb");
      Aber das ganze macht sehr wenig Sinn, es geht auch besser.

      ACK.

      Wenn Du mir sagst was du genau vorhast, sage ich Dir wie es geht.

      Wenn er dem Forum sagt, was er vorhat, sagt ihm das Forum, wie es besser geht ;-)

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
      1. Wenn er dem Forum sagt, was er vorhat, sagt ihm das Forum, wie es besser geht ;-)

        Das Forum, lieber Christoph, sagt in letzter Zeit ziemlich
        selten Anfängern wie irgendwas geht. Es wird alzu oft gepöbelt
        und der arme Anfänger mit Fachbegriffen zugeschüttet, die er
        gefälligst zu verstehen hat, sonst ist er selbst schuld.

        Leider.

        1. echo $begrüßung;

          Das Forum, lieber Christoph, sagt in letzter Zeit ziemlich
          selten Anfängern wie irgendwas geht.

          Diese Aussage ist ebenso allgemein gehalten wie unzutreffend und ungerecht den gegenüber, die sich darum bemühen.

          [...] und der arme Anfänger mit Fachbegriffen zugeschüttet, die er
          gefälligst zu verstehen hat, sonst ist er selbst schuld.

          Niemand zwingt den Anfänger, diese Fachbegriffe nicht nachzuschlagen oder nicht nachzufragen, was sie bedeuten. Wie soll er sie denn lernen, wenn sie nicht verwendet werden? Als Antwortender weiß man auch nicht, welche Fachbegriffe dem Fragenden nun geläufig sind und welche nicht.

          echo "$verabschiedung $name";

  2. Hi Leute

    Sorry das ich euch nochmals um Rat fragen muss.

    Ich habe ein Problem! Ich möchte eine eine Datei stream! Genauer gesagt ein Bild. Es ist mir wichtig das das ganze mit fopen gelöst wird!

    Folgenden Code verwende ich:

    <?php
    $file = fopen("xxx.jpg","r");
    echo $file; ?>

    Versuchs mal mit
    <?php
    $filename = "counter.txt";
    $user = "<img src="xxxx.jpg">";
    $fp = fopen ($filename, "w");
    fwrite ($fp, $user);
    echo $user;
    fclose ($fp);
    ?>
    Ist zwar ne Krücke, aber bei mir hat es eben funktioniert.
    Gruß
    tom0201

    1. Hi Tom

      Danke für die Hilfe! Habe das Script mit einigen änderungen ( counter.txt = Bildpfad & ($filename, "w") = ($filename, "r") )übernommen!

      Habe nun folgenden Code. Funktioniert super. Frage an die Experten, kann man diesen Code so ohne Probleme verwenden? Sollte schon...

      <?php
      $filename = "./img/archiv/1/5.jpg";
      $user = "<img src="./img/archiv/1/5.jpg">";
      $fp = fopen ($filename, "r");
      fwrite ($fp, $user);
      echo $user;
      fclose ($fp);
      ?>

      1. Hi Tom

        Habe nun folgenden Code. Funktioniert super. Frage an die Experten, kann man diesen Code so ohne Probleme verwenden? Sollte schon...

        <?php
        $filename = "./img/archiv/1/5.jpg";
        $user = "<img src="./img/archiv/1/5.jpg">";
        $fp = fopen ($filename, "r");
        fwrite ($fp, $user);
        echo $user;
        fclose ($fp);
        ?>

        Hi Phil,
        ich wüsste so aus dem Stehgreif nichts, was dagegen sprechen sollte ...
        Gruß
        tom0201

        1. Tach Tom

          Danke! Das war wirklich super Hilfe! Genau was ich gesucht habe!

          1. hallo Phil,

            Das war wirklich super Hilfe! Genau was ich gesucht habe!

            Du hast also danach gesucht, daß dir jemand mit "Stehgreif" fehlerhafte Rechtschreibung anbietet und die in deinem Code immer noch steckenden gravierenden Fehler übersieht?

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
            1. Hi

              Nun ja, kann sein das da noch Fehler drin sind, jedoch kann ich auch ein Teil der Probleme selber lösen. Daher reicht mir der bisherige Ansatz schon mal, werde jetzt weiter versuchen mein Problem zu lösen!

        2. hallo tom0201,

          ich wüsste so aus dem Stehgreif nichts

          Nunja, der Stehgreif ist schließlich ein ausgestorbener Greifvogel.

          Grüße aus Berlin

          Christoph S.

          --
          Visitenkarte
          ss:| zu:) ls:& fo:) va:) sh:| rl:|
      2. hallo,

        Habe nun folgenden Code. Funktioniert super.

        Hm. Womit mißt du das?

        $filename = "./img/archiv/1/5.jpg";

        Was soll eigentlich der Punkt in deiner Pfadangabe bewirken? Wäre es nicht sinnvoller, einfach nur
          $filename = "img/archiv/1/5.jpg";
        zu schreiben?

        $user = "<img src="./img/archiv/1/5.jpg">";

        Du willst offensichtlich diese Variable haben. Kannst du machen, ist aber unnötig.

        $fp = fopen ($filename, "r");
        fwrite ($fp, $user);

        Das halte ich für völlig überflüssig und falsch. Wieso willst du jetzt in dein Bild noch etwas hineinschreiben?

        echo $user;

        Nun ja. echo ist eigentlich nicht dazu da, Bilder auszugeben. Du möchtest dich wirklich mit dem Unterschied von Texten und Bildern beschäftigen.

        Meinst du nicht, daß es an der Zeit ist, daß du dein PHP-Script mals als Textdatei irgendwo hochlädst, damit man sich anschauen kann, was denn nun genau du machen möchtest? Bilder bindest du bitte mit <img ...> in dein HTML ein.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hello Hello

          Wie du sicher bemerkt hast, habe ich Grundkenntnisse von PHP aber bin noch kein Profi. Deshalb Frage ich ja hier im Forum nach.

          Du hast recht, ein Teil vom Code wurde nicht gebraucht. Der Code sieht nun so aus. ( "." und fwrite sind raus )

          <?php
          $filename = "/img/archiv/1/5.jpg";
          $user = "<img src="/img/archiv/1/5.jpg">";
          $fp = fopen ($filename, "r");
          echo $user;
          fclose ($fp);
          ?>

          Wieso ist den echo nicht für Bilder gut? Funktioniert doch super, was will man noch mehr ( als Anfänger )?

          Richtig, ich weiss das man bilder mit <img> einbinden kann, jedoch nicht Bilder aus einem chmod 0 Verzeichniss. Dies geht so weit ich jetzt weiss nur mit fopen.

          Nice Evening & Danke! Gruss Phil

          1. hallo Phil,

            Wie du sicher bemerkt hast, habe ich Grundkenntnisse von PHP

            Mag sein. Ich habe die auch.

            Du hast recht, ein Teil vom Code wurde nicht gebraucht.

            Ein sehr großer Teil. Und er wurde deshalb nicht gebraucht, weil er falsch war.

            Der Code sieht nun so aus. ( "." und fwrite sind raus )

            Nein, nach dem, was du angibst, sind beide immer noch drin:

            <?php
            $filename = "/img/archiv/1/5.jpg";
            $user = "<img src="/img/archiv/1/5.jpg">";

            Das wäre in Ordnung, wenn auchvermutlich viel zu umständlich.

            $fp = fopen ($filename, "r");
            echo $user;
            fclose ($fp);

            Und das ist ganz einfach nicht einzusehen. Warum willst du denn dein Bild unbedingt "zum Schreiben" öffnen? Und wo verarbeitest du nun deine Variable $fp?

            Wieso ist den echo nicht für Bilder gut?

            Was hast du denn in dem von mir vorhin verlinkten Handbuch gelesen?

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|