Carsten: php code in variablen

Beitrag lesen

Hallo Toadward,

Dröseln wir den Code mal auf:

$anz=20;

$inhalt='hallo $anz
  echo"tester";';

in $inhalt steht jetzt der Text 'hallo $anz \n echo "tester";'
Wie dir bestimmt auffällt ist das keine gültige PHP Syntax.

eval("$inhalt = "$inhalt";");

Hier wird jetzt folgendes Codestück zusammengebaut und ausgeführt

$inhalt="hallo $anz \n echo "tester";";
                 ^^^^
dabei wird jetzt, durch die Auswertung beim eval(), die 20 eingefügt, so
dass hinterher in $inhalt 'hallo 20 \n echo "tester";' steht, also genau die
Ausgabe die du bekommst.

Um das zu erzielen, was du dir vorstellst sähe der Code so aus:

<?php
  $anz=20;
  $inhalt='echo "hallo $anz \n tester";' ;
  eval ($inhalt);
?>

Anmerkung: Das \n erzeugt einen Zeilenumbruch im String. Ich finde die
Zeilenumbrüche im Quelltext, die hinterher im String wieder auftauchen
unübersichtlich (sie versauen die Einrückungen), deswegen stattdessen \n.

und, raucht die Birne schon?
...Nein... ok:

<?php
$anz=20;
$inhalt='hallo $anz \n echo"\ntester";';

eval("$inhalt = "$inhalt";");

echo $inhalt."<br>";

$teile=explode("\n",$inhalt);

echo $teile[0];

eval($teile[1]);

?>

jetzt bekommst du auch wieder deine 'erwartete' Ausgabe.
Tipp: Ersetze beim Testen solcher Programme eval() durch echo und guck dir
an was bei rauskommt -> es muss gültiger Code sein der das tun würde, was du
möchtest.

also funkt das eval irgendwie nur mit php variablen, aber nicht mit normalen
befehlen (die eval zeile stand so im php-manual).

Geh mal davon aus, das PHP _funktioniert_. Einer der angenehmen Eigenschaften
der Sprache. Manchmal nicht gut fürs Ego, aber schon praktisch weil man gleich
weiss wo man den Fehler suchen muss ;-)

Gruss,
Carsten