[PHP] Befehle in Variablen speichern

HighTec

Lieutenant
Registriert
Sep. 2006
Beiträge
761
ich habe mal eine Frage: Ist es möglich befehle in einer Variablen zu speichern????

Beispiel:

PHP:
$test = '<?php  
                echo $text
               ?>'
 
Warum probierst du es nicht ganz einfach aus :rolleyes:

Also ich hab jetzt auch nicht mehr gemacht

PHP:
<?php
$test = 'echo "Hallo"; ';
echo $test;
?>

Die Ausgabe lautet allerdings echo "Hallo"; anstatt Hallo, wie du das gebraucht hättest.
Meinem Versuch nach würd ich also sagen, es funktioniert nicht. Allerdings müsste es funktionieren, wenn du die Befehle in MySQL Tables speicherst und dort wieder abrufst.


so far
mfg
 
Hmm ok ich werds mal versuchen und mich wieder melden wenns probs gibt....

Thx erstmal ^^

MfG Highweb
 
Geht doch viel einfacher:
PHP:
<?php
$command="$test='blah'; echo $blah;"
eval($command);
?>
Muss "blah" ausgeben... Habs nicht probiert aber schau dir mal die Funktion Eval() an...
 
-=Renegade=- schrieb:
Allerdings müsste es funktionieren, wenn du die Befehle in MySQL Tables speicherst und dort wieder abrufst.
Nein. Du musst den String immer durch die Funktion eval() jagen. Auch wenn du sie aus einer Datenbank abrufst funktioniert es nicht ohne diesen Schritt.
 
@davidbaum

Ich versteh das nicht ganz.... was hat die variable test in de array zu tun oder hat das nix mit der ausgabe am hut?
 
Da ist doch gar kein Array drin. Das Semikolon ist ja in der Variable und dient damit nicht als Trennzeichen für das Skript, sondern nur für die in dem Moment noch nicht geparste Variable. Damit sind es zwei Befehle. Zuweisung und Ausgabe. Wenngleich da auch noch ein logischer Fehler in der Benennung der Variablen. Ein mal hast du 'test' und ein mal 'blah' als Bezeichner aber nicht die Rede wert ;)
 
Computer Freak schrieb:
Nein. Du musst den String immer durch die Funktion eval() jagen. Auch wenn du sie aus einer Datenbank abrufst funktioniert es nicht ohne diesen Schritt.

Gut zu wissen. Muss man bei eval() auf irgendwas acht geben. Ich bin mir zwar jetzt nicht ganz sicher, aber ich hab mal gehört, bei PHP Programmierung ist eval = evil :)
Was genau ist da dran und welche Fehler / Sicherheitslücken kann man damit aufreißen?


so far
mfg
 
Nun, wenn du eval z.B. auf Benutzereingaben loslässt erlaubst du dem Benutzer einen beliebigen PHP-Code auszuführen, was natürlich eine große Sicherheitslücke ist.
 
Klar gibt es mit dieser Version vor allem in Zusammenhang mit Datenbanken erhöhte Sicherheitslücken. Denn: Wenn du es nur als File hast, weiß du was drin steht, und was es so machen soll. Wenn du es in eine Datenbank schreibst, und es dann mit eval() parst kann es z.B. durch von Usern vorgenomme Datensätze erheblich Sicherheitslücken geben. Stell dir nur mal vor, du machst eine Seite auf der jeder User eine Seite hat auf der er machen kann, was er will. Wenn er da dann mal auf deine Datenbank zugreift und mal einfach "SELECT password FROM users" sagt hat er alle Passwörter in der Hand. Nicht so ganz toll, oder?;) Deswegen muss du immer darauf achten, was dann am Ende geparst wird.
Meistens geht es bei guter und bedachter Programmierung auch komplett ohne eval(), aber manchmal kommt man nicht drum herum...
 
Naja Also bau ich das ganze per array so ein wenn ich das zweite array verarbeiten möchte:

PHP:
$test = array {'echo "haalllooo";';'echo "selber hallo";'}
eval ($test[2]);
Ist das richtig so oder gehört da noch was zu?
 
Um ein Array gehören keine geschwungenen Klammern. ;)

Außerdem gehört da entweder "echo" oder "print" hin, aber kein "eval"....
 
Es wurde mir doch hier erklärt, das per eval die php befehle ausgeführt werden
 
In diesem Fall gibst du aber nur einen der beiden Werte aus. Da reicht dann "echo" bzw. "print".

Wenn ich mir deinen Code so ausgeben lasse, bekomme ich lediglich eine "PHP Parse error":
PHP Parse error: syntax error, unexpected T_STRING in C:\Inetpub\wwwroot\text.php(3) : eval()'d code on line 1

Deswegen musst du es durch "echo" oder "print" ersetzen. Dein Code lautet richtig übrigens, um das "selber hallo" auszugeben:

PHP:
<?php
$test = array ("haalllooo","selber hallo"); 
echo $test[1]; 
?>
Bei Arrays fängt PHP bei 0 an zu zählen, den Wert 2 gibt es also gar nicht. ;)
 
Zuletzt bearbeitet:
Amosh: Lies mal den ganzen Thread!

So gehört es:
PHP:
$test = array ('echo "haalllooo";','echo "selber hallo";') 
eval ($test[1]);
Ausgegeben wird dann
Code:
selber hallo
.
Du brauchst deswegen normale klammern, array() ja auch nur eine normale Funktion ist.

Ob du jetzt in deinem Array das abschliessende ; brauchst weiss ich nicht.

Gruss
 
Ja das ist mir jetzt hinterher auch aufgefallen thx..

@anosh
Es ging darum PHP Befehle in Variablen bzw. in Arrays zu Speichern und diese dann auszuführen.

Abr ich muss im allgemeinen sagen.. VIELEN DANK für die die Hilfe!
 
@davidbaumann, nicht wirklich, ich hab es eben (wieder einmal) getestet:

PHP Parse error: syntax error, unexpected T_EVAL in C:\Inetpub\wwwroot\eval.php on line 3
Mein Code dagegen funktioniert einwandfrei.

@Highweb, und Arrays gibt man nunmal mit "echo" bzw. "print" aus. ;) So hab ich das jedenfalls gelernt.
 
Am Ende der ersten Zeile hat er ein Semikolon vergessen, wenn du das dranhängst sollte es gehen.
 
Amosh schrieb:
[...]
@Highweb, und Arrays gibt man nunmal mit "echo" bzw. "print" aus. ;) So hab ich das jedenfalls gelernt.
Macht er ja auch, nur steht der echo-Befehl in dem Array, eben das war ja im 1. Post die Frage :)
 
@AoE-Maniac, stimmt. Aber mein Code ist genauso möglich. ;)
 
Zurück
Oben