Lothar: String aus anderer Datei einbinden

Hallo Leute!

Ich habe einen String, den ich per echo ausgeben möchte.

Nun möchte ich einen Teil des strings in einer anderen Datei ablegen (um ihn bei verschiedenen Strings benutzen zu können). In diesem Teilstring sollen PHP-Variablen stehen.

Datei 1:

  $benutzer = 'Benno';  
  $str = 'Das ist der Anfang';  
  // hier soll der Teilstring eingearbeitet werden  
  $str .= 'Das ist das Ende';  
  echo $str;

Datei 2:
'Das ist '.$benutzer.'s Teilstring'

Wird die zweite Datei per include(), readfile(), schreibDenInhaltHierHin() oder wie eingebunden?

Euer Lothar

  1. Hallo Leute!

    Ich habe einen String, den ich per echo ausgeben möchte.

    Woher hast du den String?

    Nun möchte ich einen Teil des strings in einer anderen Datei ablegen (um ihn bei verschiedenen Strings benutzen zu können). In diesem Teilstring sollen PHP-Variablen stehen.

    Andere Datei? Du hast bislang noch nichts von der ersten erwähnt. Was genau hast du hier denn eigentlich vor?

    Datei 1:

    $benutzer = 'Benno';

    $str = 'Das ist der Anfang';
      // hier soll der Teilstring eingearbeitet werden
      $str .= 'Das ist das Ende';
      echo $str;

    
    >   
    > Datei 2:  
    > `  'Das ist '.$benutzer.'s Teilstring'`{:.language-php}  
    >   
    > Wird die zweite Datei per include(), readfile(), schreibDenInhaltHierHin() oder wie eingebunden?  
      
    Also mir ist gänzlich unklar was der Sinn sein soll, aber es entsteht bei mir zumindest der Eindruck als ob irgendwelche Daten gespeichert und bei Bedarf wiederverwendet werden sollen.  
    Warum willst du an dieser Stelle mit Dateien statt mit einer DB arbeiten?
    
  2. Hallo,

    include(). Das auszuprobieren ist ja nicht schwer.

    Gruß

    jobo

    1. $str = "anfang";
      $str .= include('../Datei2.php');
      $str .= "ende";

      So?

      1. $str = "anfang";
        $str .= include('../Datei2.php');
        $str .= "ende";

        So?

        Das auszuprobieren ist ja nicht schwer.

        1. $str = "anfang";
          $str .= include('../Datei2.php');
          $str .= "ende";

          So?

          Das auszuprobieren ist ja nicht schwer.p

          :) made my day

        2. Ich bilde mir ein, als ich meinen Beitrag abgesendet habe, war da nichts. Nach dem Absenden stand da ein "p" unter meinem Beitrag und nun das.

          PS.: Das forum läßt mich das nicht absenden:
          "Sie haben ein Zeichen angegeben, dass in XML- und SGML-Dokumenten verboten ist. Dazu gehören vor allem die Steuerzeichen aus dem ASCII-Bereich (ausser Zeilenumbruch, Zeilenvorschub und Tabulator). Das kann z.B. passieren, wenn Sie den Inhalt einer Binär-Datei posten möchten."

          1. Jetzt ist es wieder weg aber bei Georgs Beitrag steht noch das "p".

            1. Jetzt ist es wieder weg aber bei Georgs Beitrag steht noch das "p".

              Nach dem p hatte ich auch mal so komische Zeichen, die aufgetaucht sind. Sehr merkwürdig

              1. Jetzt ist es wieder weg aber bei Georgs Beitrag steht noch das "p".
                Nach dem p hatte ich auch mal so komische Zeichen, die aufgetaucht sind. Sehr merkwürdig

                Es geht weiter, jetzt steht da ein �

                1. Es geht weiter, jetzt steht da ein �

                  Es sicht so aus. als ändert sich das mit jedem Beitrag in diesem Thread. Jetzt steht da "@Y�" was ich vermutlich wieder nicht abschicken kann.

                  PS.: Richtig vermutet, daher gekürzt, das letzte Zeichen war so ein typisches Viereck mit 0001 drin.

                  1. Es geht weiter, jetzt steht da ein �

                    Es sicht so aus. als ändert sich das mit jedem Beitrag in diesem Thread. Jetzt steht da "@Y�" was ich vermutlich wieder nicht abschicken kann.

                    PS.: Richtig vermutet, daher gekürzt, das letzte Zeichen war so ein typisches Viereck mit 0001 drin.

                    Momentan ist nichts zu sehen, daran hat auch mein Test-Beitrag nichts geändert.

                    Noch ein Test. Es sieht so aus, als ob nur Beiträge eine Wirkung haben, wechle sich im Zweig dahinter befinden. Wenn jetzt, nachdem ich diesen Beitrag abgeschickt habe, wieder komisches Zeug da steht, dann hängt es vermutlich von den Beiträgen in diesem Zweig ab.

          2. Hallo,

            Ich bilde mir ein, als ich meinen Beitrag abgesendet habe, war da nichts. Nach dem Absenden stand da ein "p" unter meinem Beitrag und nun das.

            PS.: Das forum läßt mich das nicht absenden:
            "Sie haben ein Zeichen angegeben, dass in XML- und SGML-Dokumenten verboten ist. Dazu gehören vor allem die Steuerzeichen aus dem ASCII-Bereich (ausser Zeilenumbruch, Zeilenvorschub und Tabulator). Das kann z.B. passieren, wenn Sie den Inhalt einer Binär-Datei posten möchten."

            http://forum.de.selfhtml.org/archiv/2011/5/t204742/#m1388107

            bei mir stand mal ein br /> was ich nicht hingeschrieben hatte.

            Gruß

            jobo

      2. Hallo,

        $str = "anfang";
        $str .= include('../Datei2.php');
        $str .= "ende";

        So?

        Nee, wenn du es "so" machen willst, brauchst du ob_start() und ob_get_clean().

        Du solltest aber schon eine Art Testumgebung haben. Und vielleicht auch das Manual von php.net.

        Gruß

        jobo

        1. Hi!

          $str = "anfang";
          $str .= include('../Datei2.php');
          $str .= "ende";
          So?
          Nee, wenn du es "so" machen willst, brauchst du ob_start() und ob_get_clean().

          Nein, man kann auch einfach so ein return "..."; in eine Datei schreiben, die inkludiert werden soll und include liefert dann brav wie eine Funktion diesen Wert. Die Frage ist aber immer noch, was der OP eigentlich erreichen will, denn während der Laufzeit Code zu erzeugen, den man auszuführen gedenkt ist immer eine kritische Angelegenheit. Es gibt genügend Datenformate, die man nutzen kann, es muss ja nicht immer eine DB sein.

          Lo!

          1. Hallo,

            Hi!

            $str = "anfang";
            $str .= include('../Datei2.php');
            $str .= "ende";
            So?
            Nee, wenn du es "so" machen willst, brauchst du ob_start() und ob_get_clean().

            Nein, man kann auch einfach so ein return "..."; in eine Datei schreiben, die inkludiert werden soll und include liefert dann brav wie eine Funktion diesen Wert. Die Frage ist aber immer noch, was der OP eigentlich erreichen will, denn während der Laufzeit Code zu erzeugen, den man auszuführen gedenkt ist immer eine kritische Angelegenheit. Es gibt genügend Datenformate, die man nutzen kann, es muss ja nicht immer eine DB sein.

            Naja, was aber geht und Sinn macht ist:

            ob_start()
            include("meineSeite.inc.php");
            $content = ob_get_clean();
            include (layout.php);

            in der layout.php dann:

            <html><etc.pp>
            ...
            <body>
            <?php include("menu.inc.php")?>
            <?php echo $content?>
            ...

            Gruß

            jobo

          2. Test

            (einfach ignorieren, es geht um die andere Sache)

          3. Hello,

            $str = "anfang";
            $str .= include('../Datei2.php');
            $str .= "ende";
            So?
            Nee, wenn du es "so" machen willst, brauchst du ob_start() und ob_get_clean().

            Nein, man kann auch einfach so ein return "..."; in eine Datei schreiben, die inkludiert werden soll und include liefert dann brav wie eine Funktion diesen Wert.

            Man sollte aber nicht verschweigen, dass include darüberhinaus aber noch weitere Veränderungen am Gültigkeitsbereich vornimmt, in den es eine Ressource einbindet.

            Den "Rückgabewert" liefert es zusätzlich, wenn man include wie eine Funktion aufruft. Diese "Funktion" greift aber global und nachhaltig auf alle Werte und Bezeichner des Bereiches zu, in dem sie aufgerufen wird. Das ist der Unterschied zu den normalen Funktionen in PHP.

            Außerdem fügt include auch weitere Funktionsbezeichner (Funktionen) zum Hauptgültigkeitsberich hinzu, wenn es diese enhält, auch wenn es _innerhalb_ einer Funktion aufgerufen wurde. Mitgebrachte Variablen werden hingegen nur lokal in dieser Funktion gültig.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

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

              Außerdem fügt include auch weitere Funktionsbezeichner (Funktionen) zum Hauptgültigkeitsberich hinzu, wenn es diese enhält, auch wenn es _innerhalb_ einer Funktion aufgerufen wurde. Mitgebrachte Variablen werden hingegen nur lokal in dieser Funktion gültig.

              PHP kennt keine lokalen Funktionen. Insofern ist es kein Unterschied, ob eine Funktion einfach so im Code, in einer anderen (aufgerufenen) Funktion oder in einer inkludierten Datei steht. Sie wird immer global angelegt.

              Lo!

              1. Hello,

                Außerdem fügt include auch weitere Funktionsbezeichner (Funktionen) zum Hauptgültigkeitsberich hinzu, wenn es diese enhält, auch wenn es _innerhalb_ einer Funktion aufgerufen wurde. Mitgebrachte Variablen werden hingegen nur lokal in dieser Funktion gültig.

                PHP kennt keine lokalen Funktionen. Insofern ist es kein Unterschied, ob eine Funktion einfach so im Code, in einer anderen (aufgerufenen) Funktion oder in einer inkludierten Datei steht. Sie wird immer global angelegt.

                Genau! Sag ich doch.
                Es ist nur für PHP-Einsteiger sehr gewöhnungsbedürftig.

                Und auch wenn ein Include einen Rückgabewert liefert, verhält es sich eben _nicht_ genauso, wie eine Funktion.

                Liebe Grüße aus dem schönen Oberharz

                Tom vom Berg

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

                  Genau! Sag ich doch.
                  Es ist nur für PHP-Einsteiger sehr gewöhnungsbedürftig.

                  Und auch wenn ein Include einen Rückgabewert liefert, verhält es sich eben _nicht_ genauso, wie eine Funktion.

                  Wieso nicht? Die Funktion macht etwas und gibt etwas zurück. Sie macht:

                  eval(file_get_contents($fileName));

                  Sie gibt im Erfolgsfalle int(1) zurück.

                  Was ist da anders als bei anderen Funktionen?

                  Gruß

                  jobo

                  1. Hi!

                    Und auch wenn ein Include einen Rückgabewert liefert, verhält es sich eben _nicht_ genauso, wie eine Funktion.
                    Wieso nicht? Die Funktion macht etwas und gibt etwas zurück.

                    Vielleicht hat Tom es nicht besonders verständlich beschrieben, aber ein wesentliches Merkmal einer Funktion ist, dass das was sie intern macht, keine Auswirkungen auf den globalen Variablenbestand hat, wenn sie nicht gerade mit global oder $GLOBALS[] hantiert. Funktionen öffnen also einen eigenen Kontext. Inkludierter Code hingegen wird immer im Kontext der aufrufenden Stelle ausgeführt und hat damit Zugriff auf alle Variablen, die dort verfügbar sind.

                    Was ist da anders als bei anderen Funktionen?

                    Include & Co. verhält sich nur was die Rückgabe eines Ergebnisses betrifft ähnlich einer Funktion.

                    Lo!

                    1. Hallo,

                      Include & Co. verhält sich nur was die Rückgabe eines Ergebnisses betrifft ähnlich einer Funktion.

                      Das liegt aber am eval(); Und da ist es schon nicht mehr so erwartungswiedrig:

                        
                      $testStr = "Hallo";  
                      $codeStr = 'echo $testStr;';  
                      eval($codeStr); // Hallo  
                      
                      

                      Gruß

                      jobo

                      1. Hello,

                        Include & Co. verhält sich nur was die Rückgabe eines Ergebnisses betrifft ähnlich einer Funktion.

                        Das liegt aber am eval(); Und da ist es schon nicht mehr so erwartungswiedrig:

                        $testStr = "Hallo";
                        $codeStr = 'echo $testStr;';
                        eval($codeStr); // Hallo

                          
                        Um das eval() ging es bei der vorstehenden Betrachtung gar nicht. Es ging nur um den Unterschied von include und function, die beide einen Rückgabewert liefern. Include kann aber zusätzlich alle Variablen des Gültigkeitsbereiches verändern, in dem es aufgerufen wurde  und welche hinzufügen. Eine Funktion tut das nur, wenn man dies mit GLOBAL ausdrücklich veranlasst.  
                          
                        Außerdem wird eine eingebundene Funktion nicht automatisch ausgeführt, der mit include direkt eingebundene Code aber schon, wenn das include erreicht (gelesen) wird. Im include enthaltene Funktionen werden selbstverstänflich erst aktiv, wenn das include gelesen wurde UND die Funktion aufgerufen wurde.  
                          
                          
                          
                        Ich hoffe, dass der Unterschied nun klar ist.  
                          
                          
                          
                          
                          
                          
                          
                          
                          
                        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>
                        
                        1. Hallo Tom,

                          $testStr = "Hallo";
                          $codeStr = 'echo $testStr;';
                          eval($codeStr); // Hallo

                          
                          >   
                          > Um das eval() ging es bei der vorstehenden Betrachtung gar nicht. Es ging nur um den Unterschied von include und function, die beide einen Rückgabewert liefern. Include kann aber zusätzlich alle Variablen des Gültigkeitsbereiches verändern, in dem es aufgerufen wurde  und welche hinzufügen. Eine Funktion tut das nur, wenn man dies mit GLOBAL ausdrücklich veranlasst.  
                          >   
                          > Außerdem wird eine eingebundene Funktion nicht automatisch ausgeführt, der mit include direkt eingebundene Code aber schon, wenn das include erreicht (gelesen) wird. Im include enthaltene Funktionen werden selbstverstänflich erst aktiv, wenn das include gelesen wurde UND die Funktion aufgerufen wurde.  
                          >   
                          >   
                          >   
                          > Ich hoffe, dass der Unterschied nun klar ist.  
                            
                          Include macht zwei Sachen:  
                            
                          1\. file\_get\_contents(); es liest die komplette Datei als String ein  
                          2\. eval();  
                            
                          Was du oben beschreibst, trifft auf eval() zu, und deshalb auch auf include();, weil eval() ein Teil davon ist.  
                            
                            
                          Gruß  
                            
                          jobo