eva-maria: Datei bei bestimmter url einbinden

Hallo, ich möchte es realisieren das bei einer url eine datei eingelesen werden soll. Beispiel:
Bei:
http://meinewebsite.de/test/home/startseite.php?show=3&cat=3&preview=meier

soll die datei meier.txt aus dem verzeichniss /home/test/ eingelesen werden.

Bei:
http://meinewebsite.de/test/home/startseite.php?show=3&cat=3&preview=mueller

soll die datei mueller.txt aus dem verzeichniss /home/test/ eingelesen werden. usw.

Welche möglichkeiten habe ich da?

  1. Mahlzeit eva-maria,

    Bei:
    http://meinewebsite.de/test/home/startseite.php?show=3&cat=3&preview=mueller

    soll die datei mueller.txt aus dem verzeichniss /home/test/ eingelesen werden. usw.

    Welche möglichkeiten habe ich da?

    Das superglobale Array $_GET sowie allerlei Dateifunktionen wie z.B. readfile().

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo EKKi,
      gibt es irgendwo ein Beispiel dazu, wie man mit php prüfen kann welche url grade aufgerufen wird und wenn die prüfung richtig ist dann die datei ausgeben? ich bin php neuling.

      man müsste doch die aktuelle url mit den variablen auslesen und dann prüfen ob eine entsprechende text datei vorhanden ist. Ist die Datei vorhanden wird sie halt ausgegeben ansonsten bleibt der inhalt leer.

      z.B.
      diese url auslesen:
      http://meinewebsite.de/test/home/startseite.php?show=3&cat=3&preview=mueller
      dann im ordner /home/test/ nachschaun ob mueller.txt vorhanden ist
      dann die datei mueller.txt mit echo einlesen oder?

      1. Hallo

        Mit einem PHP-Skript mit folgendem Code <?php phpinfo(); ?>, welches über den Browser aufgerufen wird, kannst du ermitteln, welche Daten dir ohne weiteren eigenen Aufwand von PHP zur Verfügung gestellt bzw. vom Webserver durchgereicht werden.

        diese url auslesen:
        http://meinewebsite.de/test/home/startseite.php?show=3&cat=3&preview=mueller

        siehe oben

        dann im ordner /home/test/ nachschaun ob mueller.txt vorhanden ist

        z.B. file_exists

        dann die datei mueller.txt mit echo einlesen oder?

        folge EKKis Links und nein, echo *folgt* dem Einlesen, hat also mit ihm selbst nichts zu tun.

        Tschö, Auge

        --
        Die deutschen Interessen werden am Liechtenstein verteidigt.
        Veranstaltungsdatenbank Vdb 0.3
        1. Hallo, ich habe nun folgendes geschrieben:

          $tmp = $_SERVER['QUERY_STRING'];  
          $filename = '../home/test/mueller.txt';  
            
          if (file_exists($filename)) {  
              print "The file $filename exists";  
          } else {  
              print "The file $filename does not exist";  
          }  
          ?>
          

          Wenn ich das nun richtig verstanden habe lese ich mit
          $tmp = $_SERVER['QUERY_STRING'];
          die aktuelle variable aus : show=3&cat=3&preview=mueller

          und dann frage ich mit dem unteren teil ab die datei mueller.txt existiert. Hie laase es nun mit print ausgeben.

          Wie stelle ich es denn nun an das der inhalt der datei mueller.txt in meinem quelltext ausgegeben wird und zwar nur dann wenn die ausgelesene url auf =mueller endet?

          Danke für eure Hilfe

          1. Hi,

            Wenn ich das nun richtig verstanden habe lese ich mit
            $tmp = $_SERVER['QUERY_STRING'];
            die aktuelle variable aus : show=3&cat=3&preview=mueller

            Das ist keine Variable, sondern der aktuelle Query-String - und zwar der *komplette*.

            Aber du bist doch nur am Wert mueller interessiert - also warum besorgst du dir nicht auch nur diesen?
            Auf $_GET wurdest du jetzt schon *mehrfach* hingewiesen - also *informiere* dich jetzt bitte, was es damit auf sich hat!

            und dann frage ich mit dem unteren teil ab die datei mueller.txt existiert.

            Ja, aber derzeit noch statisch - aber eben das ist ja der Teil, den du dynamisch machen willst.

            Wie stelle ich es denn nun an das der inhalt der datei mueller.txt in meinem quelltext ausgegeben wird und zwar nur dann wenn die ausgelesene url auf =mueller endet?

            In dem du dich jetzt informierst, wie man an den Wert herankommt, und dann, wenn du ihn hast, ihn bspw. als Parameter für readfile() verwendest.

            Und ausserdem solltest du dir noch Gedanken machen, wie das abzusichern ist, damit man darüber nicht Dateien (so gut wie) beliebigen Namens anzeigen lassen kann, die auf dem Webserver herumliegen.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
            1. Hi ChrisB,
              ich habe etwas gebastelt und mich informiert. Das ist dabei rausgekommen:

              if (isset($_GET['preview'])) {  
              readfile("../home/test/".$_GET['preview'].".txt");  
              echo "Die GET-Variable 'preview' wurde gefunden und hat den Wert '".$_GET['preview']."'.";}  
              else {  
              echo "Es wurde keine GET-Variable angegeben.";}  
                
              ?>
              

              Ist das soweit in ordnung? habe ich was vergessen und was sollte ich verbessern?...

              1. Hallo

                if (isset($_GET['preview'])) {

                readfile("../home/test/".$_GET['preview'].".txt");
                echo "Die GET-Variable 'preview' wurde gefunden und hat den Wert '".$_GET['preview']."'.";}
                else {
                echo "Es wurde keine GET-Variable angegeben.";}

                ?>

                
                >   
                > Ist das soweit in ordnung?  
                  
                geht schon mal in die richtige Richtung.  
                  
                
                > habe ich was vergessen ...  
                  
                Außer der Beachtung der Groß- und Kleinschreibung? ;-)  
                  
                
                > ... und was sollte ich verbessern?...  
                  
                Die Sicherheit des Codes sollte dir ein paar Änderungen wert sein. In `$_GET["preview"]`{:.language-php} steht ein Name, zu dem es eine gleichnamige Textdatei geben sollte. Aber was ist, wenn da was anderes, unerwartetes drin steht? Es wäre zu prüfen, ob die zu laden gewünschte Datei existiert. Dazu solltest du nach der Prüfung, ob `$_GET["preview"]`{:.language-php} gesetzt ist, den hypothetischen (noch weißt du nicht, ob es die gleichnamige Datei gibt) Pfad zusammensetzen und auf die Existenz der Datei prüfen.  
                  
                Zudem könnte `$_GET["preview"]`{:.language-php} zwar gesetzt, aber leer sein (http://example.com?preview=). Mit `!empty()`{:.language-php} erschlägst du gleichzeitig die Prüfung auf "Nicht leer" (Das Ausrufezeichen kehrt die Funktion der Funktion um) und damit mittelbar die Prüfung auf die Existenz.  
                  
                ~~~php
                if (!empty($_GET['preview'])) {  
                $pfad = "../home/test/".$_GET['preview'].".txt";  
                   if (file_exists($pfad)) {  
                      readfile($pfad);  
                   }  
                // evtl. weiterer Code  
                }
                

                Tschö, Auge

                --
                Die deutschen Interessen werden am Liechtenstein verteidigt.
                Veranstaltungsdatenbank Vdb 0.3
                1. Hello,

                  aber hoffentlich nicht so stehen lassen?

                  if (!empty($_GET['preview'])) {

                  $pfad = "../home/test/".$_GET['preview'].".txt";
                     if (file_exists($pfad)) {
                        readfile($pfad);
                     }
                  // evtl. weiterer Code
                  }

                    
                    
                  Einen Parameter aus einem Query direkt als Bestandteil eines Pfades einzubinden ermöglicht einem Angreifer alle für PHP lesbaren Dateien des eigenen Dateisystems auszulesen und was viel schlimmer ist, eventuell auch Daten aus anderen Quellen (z.B. per http) einzuschleusen, wenn die Scheme-Wrapper aktiviert sind.  
                    
                    
                    
                    
                    
                  Liebe Grüße aus dem schönen Oberharz  
                    
                    
                  Tom vom Berg  
                  ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                    
                  
                  -- 
                  Nur selber lernen macht schlau  
                  <http://bergpost.annerschbarrich.de>
                  
      2. Hi,

        man müsste doch die aktuelle url mit den variablen auslesen

        Nein, müsste man nicht.
        Über $_GET hast du Zugriff auf die Parameter, die per URL übergeben wurden.
        (*Ob* ein bestimmter übergeben wurde, möchte man vielleicht noch prüfen, bevor man ihn verwendet - dafür eigenen sich isset oder empty.)

        und dann prüfen ob eine entsprechende text datei vorhanden ist.

        Dafür gibt es Dateisystemfunktionen - lese bitte zu denen im Manual nach.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.