php in Variable
Petra
- php
Hallo,
ich erstelle gerade eine Internetseite. Dabei habe ich eine Template-Datei, die den Titel und die linke (Navigations-)Spalte enthält. Für den Inhalt ist {INHALT} gesetzt. Dieser Zeichenstring wird dann auf den entsprechenden Seiten jeweils passend erstzt. Ein Beispiel für eine willlürliche Seite:
$einfuegen = file_get_contents('../template.php');
$inhalt = '<div id="bla">Hallo, hier steht ein Inhaltstext</div>';
$aenderung = str_replace("{INHALT}",$inhalt,$einfuegen);
echo $aenderung;
Das ist alles auch wunderschön. Allerdings habe ich - etwas spät vermutlich - gemerkt, daß ich Probleme bekomme, wenn der Inhaltsteil selber php-Code mit Schleifen und allem drum und dran enthält.
Jetzt die Frage: Ich möchte wirklich nicht alles nochmal neumachen. Sind mittlerweile schon recht viele Seiten geworden. Gibt es eine Möglichkeit, die mir an der Stelle helfen könnte? Irgendwie nach dem Motto str_replace("{INHALT}",include(php-Datei),$einfuegen); oder so?
Danke für alle Ratschläge.
Gruß aus Frankreich,
Petra
hi,
etwas spät vermutlich - gemerkt, daß ich Probleme bekomme, wenn der Inhaltsteil selber php-Code mit Schleifen und allem drum und dran enthält.
Gibt es eine Möglichkeit, die mir an der Stelle helfen könnte? Irgendwie nach dem Motto str_replace("{INHALT}",include(php-Datei),$einfuegen); oder so?
Da hast du dich wahrscheinlich für das falsche Template-Engine entschieden, ausgereifte Systeme bieten dir die gewünschten Funktionalitäten, Template-Systeme.
mfg
Hello Petra,
$einfuegen = file_get_contents('../template.php');
$inhalt = '<div id="bla">Hallo, hier steht ein Inhaltstext</div>';
$aenderung = str_replace("{INHALT}",$inhalt,$einfuegen);
echo $aenderung;
Du scheinst da irgendwie im "Niemandsland" stecken geblieben zu sein.
Denn wenn Du in den einzubindenen Inhalten wieder direkt PHP-Anweisungen stehen hast, dann wäre es besser gewesen, diese auch direkt in den Templates einzubinden:
<body ...><?php include('body.php'); ?></body>
Kompliziert wird es da nur, wenn die einzubindenen Teile Konstanten oder Funktionsdefinitionen enthalten. Dann kann es zu einem redeclare/redefine-Error kommen. Ebenso muss man darauf achten, dass keine zirkulären Verläufe entstehen.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
$einfuegen = file_get_contents('../template.php');
$inhalt = '<div id="bla">Hallo, hier steht ein Inhaltstext</div>';
$aenderung = str_replace("{INHALT}",$inhalt,$einfuegen);
echo $aenderung;
Hallo Petra,
ich denke, [eval()](http://de.php.net/manual/de/function.eval.php) könnte das richtige für dich sein - damit kannst du PHP-Code innerhalb von Strings ausführen.
Allerdings haust du dir damit auch sehr schnell Sicherheitslücken in die Seite: Sobald Benutzer die Möglichkeit haben, eigenen Text zu speichern (der dann zb in einer MySQL-Datenbank abgelegt wird) und du ihn mit eval() ausführst, wäre es ja theoretisch möglich, dass die Benutzer dann zb statt einer Personenbeschreibung irgendeinen PHP-Code eingeben, der dann natürlich auch anstandslos ausgeführt wird. In so einem Fall muss der eingegebene Text natürlich überprüft werden, bevor er gespeichert wird.
Aber solange du nur deine eigenen Inhalte ausgibst, dürfte es kein Problem geben.
Beste Grüße
LarsSW
Hello Lars,
ich denke, eval() könnte das richtige für dich sein - damit kannst du PHP-Code innerhalb von Strings ausführen.
das ist leider nicht ganz so einfach.
Üblicherweise enthält so ein Template dann ja Passage, wie z.B.:
<tr>
<td><?php echo print_tabellenzelle(202,1); ?></td>
<td><?php echo print_tabellenzelle(202,2); ?></td>
</tr>
Das kann man nicht einfach in einen String übernehmen und mit eval() auswerten.
Hast Du es schon mal ausprobiert?
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg
[latex]Mae govannen![/latex]
Das ist alles auch wunderschön. Allerdings habe ich - etwas spät vermutlich - gemerkt, daß ich Probleme bekomme, wenn der Inhaltsteil selber php-Code mit Schleifen und allem drum und dran enthält.
du kannst z.B. mit ob_start()
einen neuen Puffer bereitstellen, dann mit include
die gewünschte Datei in diesen Puffer abarbeiten lassen und das Resultat mit ob_get_contents()
in eine String einlesen, den du dann wie gewünscht statt des Platzhalters einsetzt. Dann noch den neuen Puffer mit ob_end_clean()
leeren und entfernen.
Cü,
Kai
[latex]Mae govannen![/latex]
Das ist alles auch wunderschön. Allerdings habe ich - etwas spät vermutlich - gemerkt, daß ich Probleme bekomme, wenn der Inhaltsteil selber php-Code mit Schleifen und allem drum und dran enthält.
du kannst z.B. mit
ob_start()
einen neuen Puffer bereitstellen, dann mitinclude
die gewünschte Datei in diesen Puffer abarbeiten lassen und das Resultat mitob_get_contents()
in eine String einlesen, den du dann wie gewünscht statt des Platzhalters einsetzt. Dann noch den neuen Puffer mitob_end_clean()
leeren und entfernen.Cü,
Kai
Das funktioniert!! Vielen vielen Dank!