ob_get_contents / eval Problem in while schleifen

shinbo

Mitglied
Ich habe so ein Problem an dem ich echt am verzweifeln bin.

Ich möchte einen Codeblock von einer anderen Seite einladen und diese später mit Variablen füllen und bekomme es irgendwie nicht hin. Ich habe schon einige versuche mit eval() und ob_get_contents() gemacht aber spätestens wenn ich das ganze in einer do while schleife setzte geht es irgendwie nicht so wie ich es mir vorstelle. Es muss doch irgendwie gehen so was zu realisieren.

Codeblock aus der content.php das per require oder include eingeladen wird:

PHP:
$test ='<div class="normal">Dein Name ist $name</div>
<div class="normal"> Dein Wohnort ist $ wohnort</div>';
// usw.

aber erst in der do while Schleife gefüllt werden also:

PHP:
do{
$name =  $row_Recordset1['name'];
$wohnort =  $row_Recordset1['wohnort'];
 
//der Codeblock 
/// damit es so aussieht
//<div class="normal">Dein Name ist Hanz</div>
//<div class="normal"> Dein Wohnort ist Deutschland</div>
// usw.
 
 
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));

das will so nicht:

PHP:
 ob_start();
$test = require('content.php'); 
$test = ob_get_contents();
eval ( "\$test = \"$test \";" ); //eval ( "?".">".$test."<"."?");
ob_end_clean(); 
 
echo $test;


Wenn ich das so mache geht es spätestens in der Schleife nicht:

PHP:
$test = addslashes($test);
eval ( "\$test = \"$test \";" );
 echo $test

ich will nur das die Datei einmalig eingeladen wird und dann für spätere ausgaben bereitsteht.
Weis da jemand weiter?
 
Hier mal ein anderer Ansatz...

Mit preg_replace hab ich es spontan irgendwie nicht hinbekommen, deshalb ein wenig um die Ecke...

PHP:
<pre>
<?php
$name = 'Hans';
$wohnort = 'Musterstadt';
$str = '<div class="normal">Dein Name ist $name</div>
<div class="normal"> Dein Wohnort ist $wohnort</div>';

$pattern = '#\$([A-Za-z0-9]*)#';

preg_match_all($pattern, $str, $matches);
print_r($matches);

foreach($matches[1] as $value)
{
	$str = str_replace('$'.$value, ${$value}, $str);
}
echo $str;
?>
</pre>
 
Das werde ich mal sofort ausprobieren. …Da manchmal die schleife100X läuft hoffe ich dass die Performance nicht darunter leidet. Na ja mit eval leidet die Performance auch. Ich hatte in dieser Schleife mal ein preg_replace drinnen und ihn wegen der Performance wieder rausgeschmissen. Manchmal war der Seitenaufbau so lange das man eine Werbung von 10 Sec. hätte schalten können. Das passierte aber nur dann wenn die schleife 100X durchlief. Ich hoffe doch es passiert nicht dasselbe. OK, es gab da auch mehr als nur 10 reguläre Ausdrücke die gesucht und ersetzt wurden.
 
Irgendwie will es nicht so wie gedacht. So habe ich als erstes eine do while Schleife und dann eine foreach Schleife die das Array durchsucht und ersetzt das durch preg_match_all endstanden ist. Auserdem habe ich damit probleme wenn es in der do while Schleife steht.
Mein Ansatz ist jetzt so:

PHP:
  require('content.php');
 function superstest($str,$name,$wohnort,$ID  /* USW.*/ )
{
$str= addslashes($str);
  eval ( "\$str= \"$str\";" );
  return stripslashes($str);
}
 
 
do{
$name =  $row_Recordset1['name'];
$wohnort =  $row_Recordset1['wohnort'];
$ID  = $row_Recordset1['ID'];
 
 $ausgabe .=  superstest($str,$name,$wohnort,$ID  /* USW.*/ );
 
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); 
echo  $ausgabe;

nur leider habe ich Probleme wenn der String in der content.php im Gänsefüße („“) oder wenn das ganze im Hochkomma steht. Dann werden einige variablen nicht gefüllt wie hier:

PHP:
$str ='<a href="www.eineURL.de?=$ID”> die URL </a>';

Gibt es eine elegante Lösung?
 
Zuletzt bearbeitet:
Zurück