Worscht Kall: CMS - Includes

hallo,

Titelwahl wohl etwas Schwammig...
Ich habe mir ein eigenes CMS gebastelt und Jetzt besteht der Wunsch, dass es möglich ist Scripte zu Includen. Mit dem CMS ist es zwar möglich HTML einzufügen aber nicht PHP.
Scripte werden daher vorher angefertigt und sollen per CMS includiert werden. Bei der eingabe von [include]scriptnr2[/include] soll an der stelle das Script Nr 2 includiert werden.
Nun hab ich folgendes versucht:

#$titel   = mysql_result($result, $i, 0);
$content = mysql_result($result, $i, 1);

$content = ereg_replace("[INCLUDE]scriptnr2[/INCLUDE]", include("scriptnr2.php", $content);

print $content;

Aber wie ich sofort gemerkt habe, geht das nicht.
Aber sinngemäß möchte ich es so haben.
auch das einlesen mit file() geht nicht.

Wie kann ich das realisieren?

Worscht Kall

  1. Hi,

    Wie kann ich das realisieren?

    Wenn Du genau weißt, was Du tust: eval()

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hi,

      Wenn Du genau weißt, was Du tust: eval()

      Also so genau weiß ich es nicht, aber habs mal versucht:
      -------------------------------------------------------
      #$titel   = mysql_result($result, $i, 0);
      $content = mysql_result($result, $i, 1);

      $file = "test.php";
      $data = fopen($file, "r");
      $code = fread($data, filesize($file));
      fclose($data);

      if(isset($code)) $code = get_magic_quotes_gpc()? stripslashes($code): $code;

      $search = "[INCLUDE]script[/INCLUDE]";
      if (ereg($search, $content)) $content = ereg_replace($search, eval("?>".$code), $content);

      print $content;
      ---------------
      lese test.php in $code ein
      mache es für eval() lesbar
      suche und erstze mit ereg()

      (wegen sicherheit: zugang zum cms hat man nur mit pw (.htaccess))

      ABER:
      Wieso führt er den testcode nicht an der richtigen stelle aus, sondern als erstes?
      Habe eine Test file
      ---------------
      Test ahllo

      [inlcude...]

      Testsdfasdfadf
      ---------------
      raus kommt aber
      ---------------
      ([include...])
      Test ahllo

      Testsdfasdfasdf
      ---------------
      sollte aber eigentlich so kommen
      ---------------
      Test ahllo
      ([include...])
      Testsdfasdfasdf
      ---------------

      Ich hoffe das war jetzt nicht zuviel durcheinander.

      Worscht Kall

      1. Hi,

        Ich hoffe das war jetzt nicht zuviel durcheinander.

        Also für mich schon. :)

        BTW:

        if (ereg($search, $content)) $content = ereg_replace($search, eval("?>".$code), $content);

        Ich glaube kaum, daß Du "?>" evaluieren kannst - vom $code dahinter ganz zu schweigen. =;-)

        Und selbst wenn Du "?>" evaluieren könntest, würde es keinen Sinn ergeben. :)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Also nochmal: in meiner test.php steht <? echo "hallo"; ?>
          und mit dem geposteten QT funktioniert das auch. nur nicht an der richtigen stelle.

          ich habe ja eine cms page in etwa so:
          --------
          hallo1

          [inlcude here]

          test
          --------

          und raus kommen soll

          -------
          hallo1

          hallo

          test
          -------

          raus kommen tut aber

          -------
          hallo
          hallo1

          test
          -------

          jetzt klarer?

          Ich werde wenn es sonst keine lösungen gibt den content string $content abfragen ob [includes] vorgesehen sind und wenn ja dann zerteile ich den string in vorderstück und hinterstück und gebe erst das erste stück aus, führe den eval($code) aus und gebe dann das 2. stück aus.

          Worscht Kall

          1. Hi,

            ich habe ja eine cms page in etwa so:

            hallo1

            [inlcude here]

            test

            hallo1

            <?php include("test.php"); ?>

            test

            oder eben:

            <?php $myIncludeString='include("test.php")'; ?>

            hallo1

            <?php eval($myIncludeString); ?>

            test

            Ungetestet, aber würde mich echt überraschen, wenn nicht das gleiche herauskäme.

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            1. hmmmmmmmmm.........
              Einen ausführbaren $code habe ich doch. Das Problem liegt doch bei
              $content = ereg_replace($search, eval("?>".$code), $content);
              Hier ersetzt er mir nicht $search durch $code sondern eben wie im letzten posting beschrieben.

              Das ist totaler sch***!

              nicht mal
              $html = eval("?>".$code);
              fuktioniert.

              Also ist eval() nicht das richtige!

              Worscht Kall

              1. Hallo,

                Es geht auch anders!
                (fürs Archiv)

                $content = mysql_result($result, $i, 1);

                $code_ = explode("[/include]", $content);
                for($k=0; $k <= count($code_); $k++)
                {
                 $code_part = $code_[$k];
                 $code_part_ = explode("[include]", $code_part);
                 $code_part_print = $code_part_[0];
                 $script_name = $code_part_[1];
                 print $code_part_print;
                 if ($script_name != "") include($script_name);
                 unset ($code_part_print);
                 unset ($script_name);
                }

                Worscht Kall

              2. Hiho,

                nicht mal
                $html = eval("?>".$code);

                Wie soll da auch funktionieren? Wie du sicher weisst beginnt gültiger  PHP Code mit einem "<?php" und endet mit "?>". Was soll denn da ausgeführt werden, wenn die ersten beiden zeichen mit denen du eval fütterst gleich aussagen "hier ist der Code zuende"?

                Abgesehen davon kannst du das Ergebniss von eval nicht (ohne weiteres) in eine Variable speichern. Wenn du in deinem Code ein echo hast wird das von eval ganz normal ausgeführt und direkt ausgegeben. Wenn du $html einen Wert zuweisen willst musst du in deinem eval-Code halt schreiben
                eval("<?php $html = 'Hallo' ?>");

                Alternativ kannst du dir auch noch mal [1] durchlesen. Damit kannst du die Ausgabe des eval() Codes abfangen und danach in eine Variable quetschen.

                Marc

                1: http://www.php.net/manual/en/function.ob-start.php

                1. echo $begrüßung;

                  Wie du sicher weisst beginnt gültiger PHP Code mit einem "<?php" und endet mit "?>".

                  Ja, im Allgemeinen muss man das so machen.

                  eval("<?php $html = 'Hallo' ?>");

                  Bei eval() darf man das aber nicht. (Außerdem musst du ein \ vor das $ schreiben, wenn du schon ""-Strings verwendst und keine Variablenersetzung willst. Besser wäre, immer '' zu nehmen und nur wenn man die Funktionalität von "" braucht, diese zu verwenden.)

                  Abgesehen davon kannst du das Ergebniss von eval nicht (ohne weiteres) in eine Variable speichern.

                  Oh doch, man muss es nur eins mit return zurückgeben.

                  echo "$verabschiedung $name";