tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
255
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    -GS-Master -GS-Master ist offline Mitglied Platin
    Registriert seit
    Sep 2005
    Beiträge
    705
    PHP-Code:
    <?php
    $Design 
    file_get_contents ('Layout.php');
    $Design str_replace("{SEARCH}""<?php include('search.php'); ?>"$Design);
    echo 
    $Design;
    ?>
    Ich glaube es merkt sofort jeder was ich versucht habe -.-
    Wollte statt dem Platzhalter ein Script includen lassen, jedoch wird mir bloß die PHP-Zeile in den Quellcode geschrieben --> jedoch nicht ausgeführt!

    Hoff ihr könnt mir sagen wie ich es anstellen müsste um mein Ziel zu erreichen.
     

  2. #2
    Avatar von split
    split split ist offline Mitglied Platin
    Registriert seit
    Jan 2004
    Ort
    München
    Beiträge
    574
    file_get_contents() lädt einfach nur den Inhalt einer Datei - ohne ihn zu parsen. Dann schreibst du zwar einen PHP-Befehl hinein, dieser wird allerdings nur als String gewertet! Du kannst das (denke ich) folgendermaßen lösen:
    PHP-Code:
    <?php
       
       
    // Den Inhalt der ausgeführten search.php in eine Variable schreiben...
       
    ob_start();
       include_once 
    "search.php";
       
    $cnt ob_get_clean();

       
    // Datei laden und entsprechende Stelle ersetzen
       
    $design file_get_contents("Layout.php");
       echo 
    str_replace("{SEARCH}"$cnt$design);
    ?>
    Ansonsten könntest du natürlich auch die Datei Layout.php in zwei Hälften aufsplitten und dazwischen den include()-Befehl ausführen:
    PHP-Code:
    <?php
       $design 
    file_get_contents("Layout.php");
       
    $spl explode("{SEARCH}"$design);
       echo 
    $spl[0];
       include 
    "search.php";
       echo 
    $spl[1];
    ?>
    Beides sicher nicht die elegantesten Lösungen, aber sie (sollten) funktionieren - auch ohne dass ich das jetzt ausprobiert habe...

    Allerdings gibt es viel bessere Lösungen für Templates o.ä...
     
    Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut

  3. #3
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Oder auf eval() zurückgreifen, wenn es denn wirklich dieser Weg sein muss.
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  4. #4
    -GS-Master -GS-Master ist offline Mitglied Platin
    Registriert seit
    Sep 2005
    Beiträge
    705
    Ja wobei ich das mit eval irgendwie mal richtig verstehen möchte -.-
    Irgendwie schaff ich dass zwar, aber hab keinen plassen Schimmer davon ...

    Hat geholfen -.- danke nochmal
     

  5. #5
    Avatar von split
    split split ist offline Mitglied Platin
    Registriert seit
    Jan 2004
    Ort
    München
    Beiträge
    574
    Zitat Zitat von -GS-Master Beitrag anzeigen
    Ja wobei ich das mit eval irgendwie mal richtig verstehen möchte -.-
    Irgendwie schaff ich dass zwar, aber hab keinen plassen Schimmer davon ...

    Hat geholfen -.- danke nochmal
    Vorsicht: off-topic

    Hallo!

    Dann versuch ich mal die Funktion eval() zu erklären...

    Also: Vereinfacht, bzw. zum besseren Verständnis kann man sagen, dass alles, was der eval-Funktion als Parameter übergeben wird, in den Rumpf einer Funktion geschrieben wird.
    Aus folgendem:
    PHP-Code:
    eval("echo \"Hallo!\";"); 
    wird folgendes:
    PHP-Code:
    function execMyCode() {
       echo 
    "Hallo!";

    Dabei wird auch klar, dass man eval() z.B. nicht einfach den Quellcode einer PHP-Datei übergeben kann. Denn sonst würde die generierte Funktion (z.B.) so aussehen:
    PHP-Code:
    function execMyCode() {
       <html>
       <?php
          loadHead
    ();
          
    loadBody();
       
    ?>
       </html>
    }
    Das ist syntaktisch natürlich absoluter Blödsinn!

    Bleibt man bei der Annahme, dass PHP eine Funktion generiert, so wird auch deutlich, dass ein return innerhalb derer die Ausführung des an eval() übergebenen Codes unterbrochen wird:
    PHP-Code:
    eval("echo \"Foo\"; return; echo \"Bar\""); 
    Die Ausgabe wäre hier: Foo
    Vor der Ausgabe von "Bar" wird die Ausführung der "Funktion" ja abgebrochen.

    So, bei return gibt es allerdings etwas zu beachten: Bei älteren Versionen von PHP (3 und abwärts) hat die eval()-Funktion keinen Rückgabewert. Das heißt jedes return innerhalb von eval(), würde die Ausführung zwar unterbrechen, jedoch nichts zurückgeben - auch wenn etwas spezifiziert wurde. Zum besseren Verständnis:
    PHP-Code:
    $str = eval("return \"test\";");
    var_dump($str); // in PHP3 und abwärts hätte $str den Wert NULL.
                   // in PHP4 und aufwärts hätte $str den Wert "test"

    $str = eval("return;");
    var_dump($str); // in allen PHP-Versionen hätte $str den Wert NULL. 
    Ich habe gerade das Gerücht in die Welt gesetzt, dass der in eval()-stehende Code zu einer Funktion übersetzt wird. Das ist natürlich nicht richtig, sondern sollte nur dem Verständnis gelten! Es kann auch gar nicht so sein - denn was unterscheidet eine "von eval() generierte Funktion" von einer normalen Funktion? Innerhalb von eval() kann auf Variablen zugegriffen werden, auch wenn diese außerhalb deklariert werden! Auf in eval() deklarierte Variablen kann auch von außen nach der eval()-Ausführung zugegriffen werden!

    Was ergibt z.B. folgendes?
    PHP-Code:
    <?php
       $str 
    "Das ist ein Test!<br/>";

       
    // Die Backslashes sind notwendig, weil ansonsten der Inhalt der Variablen
       // als solcher in den Quelltext einfließen würde... Optional kann man
       // die Backslashes auch weglassen und stattdessen den gesamten
       // Code innerhalb von eval() mit einfachen Anführungszeichen ' versehen.
       
    $retVal = eval("echo \$str; \$str = \"Dies ist ein weiterer Test.\"; return \"Ein Wert.\"; \$str = \"Diese Stelle wird nicht erreicht!\";");

       echo 
    $str;
       echo 
    $retVal;
    ?>
    Dies würde folgende Ausgabe erzeugen:
    Code :
    1
    2
    3
    
    Das ist ein Test!
    Dies ist ein weiterer Test.
    Ein Wert.

    In PHP3 und abwärts, gäbe es allerdings diese Ausgabe:
    Code :
    1
    2
    
    Das ist ein Test!
    Dies ist ein weiterer Test.
    Ein NULL-Wert würde nicht ausgegeben werden!


    Soviel dazu... ich hoffe, ich hab jetzt nicht für noch mehr Verwirrung gesorgt und konnte etwas Licht ins Dunkle bringen


    Gruß
    split
     
    Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut

Ähnliche Themen

  1. Wie geht denn sowas?
    Von S-AGE im Forum Photoshop
    Antworten: 5
    Letzter Beitrag: 21.02.08, 00:32
  2. refcount.php?id=35 - Wie geht denn sowas?
    Von Systemcrash im Forum PHP
    Antworten: 2
    Letzter Beitrag: 30.01.03, 20:57
  3. Wieso geht das nicht ?...
    Von Trash im Forum PHP
    Antworten: 2
    Letzter Beitrag: 09.05.02, 01:25
  4. wie geht denn sowas?
    Von NgiseD im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 03.05.02, 17:50
  5. wieso geht das nicht :(
    Von Leander im Forum PHP
    Antworten: 2
    Letzter Beitrag: 17.12.01, 19:55