CMS - Includes
Worscht Kall
- php
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
Hi,
Wie kann ich das realisieren?
Wenn Du genau weißt, was Du tust: eval()
Gruß, Cybaer
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
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
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
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
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
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
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
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";