Ik heb een script waarin ik een stukje HTML met PHP-code erin uit een bestand laad. Nee, dit bestand is geen PHP-bestand, en heeft dus ook geen <?php /* CODE */ ?> tags.
Bijv:
Hey ik ben {$naam} en ik woon in {$plaats}.
Ik lees dat bestand uit m.b.v.
<?php $content = fread(fopen($file,'r'),filesize($file)); ?>
Als ik $content echo krijg ik:
Hey ik ben {$naam} en ik woon in {$plaats}.
Het moet echter worden:
Hey ik ben Peter en ik woon in Oude Pekela.
Hoe moet ik de variabele $content laten parsen door PHP zodat hij de variabelen $naam en $plaats 'invuld'?
@Baarr: eval() is hier geen optie. De parameter die je meegeeft aan deze functie mag alleen maar uit php code bestaan. In bovenstaand geval zal php dus gewoon een parse error geven...
De enige oplossing is dus de tweede oplossing die je aandraagt. Evt. zou je het nog met een preg_replace kunnen doen om de variabelenaam te herkennen...
ps. Probeer dit bijvoorbeeld maar eens uit te voeren, je zult zien dat het niet werkt:
<?php
$naam = 'Kees';
$plaats = 'Amsterdam';
eval('Hey ik ben {$naam} en ik woon in {$plaats}.');
?>
@Baarr: Ik zou het ook graag anders doen, maar dan wordt het een onoverzichtelijke klerenbende... Ik ben namelijk bezig met een vrij uitgebreidt script met veel MySQL-query's. Die sla ik het liefst overzichtelijk op, wat per query zo'n 10-35 regels kost. Als je 20*dit aantal regels in 1 file moet zetten krijg je twee problemen: ten eerste moet je telkens die hele file doorlopen, en ten tweede wordt je file ellendig lang. Daarom heb ik er voor gekozen de langere queries op te slaan in aparte files, en die via eval() binnen te halen.
@Blanche: op www.php.net staat een uitleg hoe dit wél kan werken met eval():
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
<?php
$naam = 'Kees';
$plaats = 'Amsterdam';
eval('$blaat = "Hey ik ben {$naam} en ik woon in {$plaats}.";');
// hier de rest van je code
echo $blaat;
?>