Hello Dieter,
der Content (html) für meine HP habe ich in eine DB ausgelagert, d.h. DB-Query -> String -> echo string.
Mein Problem ist nun, das ich gerne in verschiedenen Seiten PHP-Funktionen wie auch Variablen verwenden möchte, so das ich den String vor dem echo dementsprechend nach PHP-Code filtern und diesen dann entsprechend abarbeiten lassen müsste.
Meine Grundidee war, dieses über regex zu lösen, also z.B.:
$string = 'Hallo Welt<br>#include("funktion.php");##echo $funktionsergebnis;#<hr>Weiteres HTML';
regex -> Suche nach "#[*]#"
eval -> Suchergebnis
regex -> PHP-Funktionen aus string entfernen und durch Funktionsergebnis ersetzten.
Das ist wirklich eine interessante Denksportaufgabe, Deinen Knoten aufzulösen.
Jedenfalls versuchst Du das Rad gerade neu zu erfinden.
PHP-Code in Datenbanken ist nichts neues und auch nicht besonders ungewöhnlich, aber wer sollte ausführbar sein. Du schreibst nun nicht PHP-Code in die Datenbank, sondern HTML-Code, der wiederum PHP-Code enthält. Du benutzt aber nicht die von PHP vorgesehenen Open-Tags dafür.
Hallo Welt<br>
<?php
include("funktion.php");
echo $funktionsergebnis;
?>
<hr>Weiteres HTML
Wäre ja ein gültiges HTML-Schnipsel mit embedded PHP-Code
Bei eval() geht PHP aber davon aus, dass im String gültiges PHP drin steckt.
Das kannst Du dann mit eval wieder in den HTML-Kontext stellen lassen.
<?php ### eval.php ###
$str = '?><p>Hallo <?php echo $string ?></p><?php echo sqrt(33);';
$string = "hallo Steve!";
eval ($str);
?>
So funktioniert es auch mit "ausgegrenztem HTML-Code".
Dein Stück Code müsste also folgendermaßen aussehen:
------------------------------------------------------
<?php ### funktion.php ###
$funktionsergebnis = 'Hier ist die Lösung';
?>
------------------------------------------------------
<?php ###dieter-code.php ###
$mixcode =
"?>Hallo Welt<br>
<?php
include("funktion.php");
echo $funktionsergebnis;
?>
<hr>Weiteres HTML<?php ";
eval($mixcode);
?>
-------------------------------------------------------
In den Files natürlich immer nur die Zeilen zwischen den Opener-Tags inclusive dieser.
Wenn Du nun also noch einen Schritt weitergehen willst, dann müsstest Du einen neuen Tag erfinden für den PHP-Opener und einen neuen für den Abschluß-Tag.
Die könntest Du dann mittels str_replace() oder, wenn es sicherer werden soll, mittels eigener Funktion oder eben Regualr Expressions wieder in die eingestellten PHP-Tags zurücktauschen und dann den String in oben gezeigter Manier an eval() übergeben.
Bedenke auch, dass einmal deklarierte und implementierte Funktionen für die geasamte Scriptlaufzeit gelten. Solltest Du also in den Datensätzen Funktionen deklarieren, und die Datensaätze dann "Laden", stößt Du auf das nächte Problem: "Function can not be redeclared" oder so ähnlich...
Viel Spaß beim Experimentieren.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)
