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'?
Opmerking, je bent fout bezig !

Optie: eval()
@Baarr: why? omdat ik PHP uit een file parse? Niet geheel veilig uiteraard, maar daarnaast zie ik weinig bezwaren... vooral in mijn geval...

Maar iig bedankt!
eval == evil


Anyway, ik zou het zo doen (ervan uitgaande dat ik niet onder deze situatie uit kan)

Gebruik str_replace om de waardes te vullen

Dus $return = str_replace('{$naam}', $naam, $tekst);

Let op dat er single quotes om de eerste $naam staan.

Dit kun je eventueel ook nog in een loopje zetten.

Als ik wel onder deze situatie uit kan zou ik heel mijn systeem anders opzetten zodat ik dit niet hoef te doen, maar dat even terzijde.

@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}.');
?>
Wel de echo functie meegeven in dit geval.


<?php
$naam = 'Kees';
$plaats = 'Amsterdam';

eval('echo "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";
?>
Lees mijn bovenstaande post van 21:49
Baarr schreef op 18.04.2007 21:50
Lees mijn bovenstaande post van 21:49


Als je 'em meteen wil echo'en is dit de beste optie, maar zo niet...
Zo dan:


<?php
$naam = 'Kees';
$plaats = 'Amsterdam';

eval('$blaat = "Hey ik ben {$naam} en ik woon in {$plaats}.";');

// hier de rest van je code

echo $blaat;

?> 
dat is zeg maar ongeveer exact hetzelfde als wat ik zei, op een paar escaped quotes na... weinig toevoegend dus...

Reageren