Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

PHP-Code in einem Text ausführen

0 views
Skip to first unread message

Aeneas Wiener

unread,
Jan 26, 2001, 3:21:54 PM1/26/01
to
Hallo an Alle!

Ich habe ein (für mich) sehr grosses Problem, bitte helft mir!

Folgendes:
Ich habe Text in einer Datenbank gespeichert, den ich auf einer Website
ausgeben möchte. Manchmal kann es jedoch sein, dass sich kleinere PHP-Codes
in diesem Text befinden, die dann ausgeführt werden sollen. Die stellen mit
dem PHP-Code werde ich im Text jeweils mit [php] einleiten und mit [php
ende] abschliessen.

Mein Lösungsansatz sieht so aus:

/* der Text, der normalerweise im Browser angezeigt werden soll, nur die
Stellen mit PHP-Code sollen vom PHP-Interpreter interpretiert werden. */

$daten[text] = 'dies ist ein text, der aus einer "guten" MySQL-DB kommt und
jetzt kommt ein PHP-Code, den Sie nicht sehen, weil er von Server ausgeführt
wurde [php] $variable = "blabla"; [php ende] so, jetzt ist wieder der
normale [php] echo "$variable"; [php ende] Text. ';

/* Weil ich im normalen Text auch Anführungszeichen verwenden möchte, werden
sie hier maskiert. */

daten[text] = addslashes($daten[text]);

/* hier suche ich alle Stellen, die ich mit [php] und [php ende] als zu
interpretierender PHP-Code gekennzeichnet habe */

preg_match_all("|(\[php\])([^\[]*)(\[php ende\])|", "$daten[text]", $out,
PREG_PATTERN_ORDER);

/* Hier "stripslashe" ich den ersten gefundenen Text, der mit
preg_match_all() gefunden wurde, da dieser Text ja schliesslich als PHP-Code
ausgeführt werden soll und dazu braucht er auch Anführungszeichen.

Hier habe ich noch ein grosses Problem, denn ich weiss nicht, wie ich alle
gefundenen [php]code[php ende]-Stellen "stripslashen" kann. Weiss jemand,
wie das geht? */

$out[2][0] = stripslashes($out[2][0]);

/* hier suche ich, wie oben, alle Stellen in meinem Text, die mit [php]
beginnen, dann etwas dazwischen haben und mit [php ende] aufhören. Diese
stellen ersetzte ich mit dem stripgeslashten PHP-Code.

Hier habe ich das Problem, dass alle stellen mit [php]...[php ende] mit dem
selben PHP-Code ersetzt werden. Kann mir jemand sagen, wie ich das machen
kann, dass jede [php]..[php ende]-Stelle mit dem richtigen PHP-Code ersetzt
wird?

Und das andere Problem hier ist, dass, wenn ich vor und nach $out[2][1] ein
<?php bezieungsweise ein ?> setzte funktioniert das ganze nicht mer. */

$daten[text] = preg_replace("|(\[php\])([^\[]*)(\[php ende\])|",
$out[2][0],
$daten[text]);

/* Hier gebe ich das ganze aus */

eval ("\$daten[text] = \"$daten[text]\";");
print $daten[text];

Wie ihr seht, habe ich schon ein paar Ansätze, bin aber noch lange nicht
dot, wo ich hin möchte, deshalb bitte ich euch um Hilfe!

Wenn noch etwas unklar ist, fragt mich bitte! Ich wäre wirklich super froh,
wenn mir jemand von euch Helfen könnte!

Viele Grüße und schon 1000 Dank in Voraus,

Aeneas

Meine Website, für die ich das brauche ist übrigens http://aeneas.ch/

P.S.: Oder gibt es so was schon anderswo, wo ich es kopieren könnte?


Johannes Froemter

unread,
Jan 26, 2001, 3:41:42 PM1/26/01
to
Aeneas Wiener schrieb in <94sm95$a8$1...@duba04h09-0.dplanet.ch>:

[Riesen-Gedöns :-)]

>Wenn noch etwas unklar ist, fragt mich bitte! Ich wäre wirklich super froh,
>wenn mir jemand von euch Helfen könnte!

Du schreibst nicht, *warum* du diese ganzen Verrenkungen machst!?

<?php
$daten = 'Dies ist Text mit <?php echo "PHP-Code"; ?> darin!';
echo eval("?>". $daten);
?>

Wichtig ist das einleitende "?>", denn eval() erwartet PHP-Code, und
$daten fängt mit Gelaber an...

Witzig finde ich nur, daß "<?" am Schluß genauso ok ist wie ohne,
"<?php" aber einen Parse Error hervorruft... :*)

--
MfG
Johannes

Aeneas Wiener

unread,
Jan 27, 2001, 6:10:03 AM1/27/01
to
Danke, es funktioniert!

> Du schreibst nicht, *warum* du diese ganzen Verrenkungen machst!?

Naja, du kennst sicher dieses Problem mit dem Wald und dem Bäumen?
Die vielen tollen PHP-Funktionen sind die Bäume und die Lösung ist der Wald.

Nochmal danke!


Bjoern Hoehrmann

unread,
Jan 27, 2001, 3:30:58 PM1/27/01
to
* Johannes Froemter wrote in de.comp.lang.php:

><?php
> $daten = 'Dies ist Text mit <?php echo "PHP-Code"; ?> darin!';
> echo eval("?>". $daten);
>?>

Beim ersten ?> ist der Quellcode zuende, dein Script ist kaputt. Der
Parser ist kaputt und akzeptiert das noch, das kann und wird sich
(hoffentlich) ändern. Schütze das > in ?> Sequenzen, also "?\>".
--
Björn Höhrmann ^ mailto:bjo...@hoehrmann.de ^ http://www.bjoernsworld.de
am Badedeich 7 ° Telefon: +49(0)4667/981028 ° http://bjoern.hoehrmann.de
25899 Dagebüll # PGP Pub. KeyID: 0xA4357E78 # http://learn.to/quote [!]e
Well, my .signature isn't the most interesting part of my articles....

Johannes Froemter

unread,
Jan 27, 2001, 6:32:03 PM1/27/01
to
Bjoern Hoehrmann schrieb in
<3a8b25ff...@news.bjoern.hoehrmann.de>:

>> echo eval("?>". $daten);

>Beim ersten ?> ist der Quellcode zuende, dein Script ist kaputt.

Nun, offensichtlich funktioniert der Parser bei eval() so wie bei
include() mit dem Unterschied, daß zu Beginn nicht in den HTML-Modus
umgeschaltet wird. Deshalb in obigem Fall das vorangestellte "?>".

Woraus schließt du, daß multiple PIs bei eval() nicht erlaubt sind?

>Der Parser ist kaputt und akzeptiert das noch, das kann und wird sich
>(hoffentlich) ändern. Schütze das > in ?> Sequenzen, also "?\>".

Ist das PHP5 oder PHP6? Oder ein Hirngespinst? ;->

--
MfG
Johannes

0 new messages