• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

php-code ausführen

omoxen

Blogger
hallo,
um die Vorschau einer Seite zu erstellen, bräuchte ich eine Funktion, die PHP-Code ausführt. Gibt es so eine?
Ich meine nicht eval()... sondern es soll eine Funktion sein, der ich einen String übergebe, wie ich ihn in einer .php-Datei angeben kann. Also evtl. auch noch mit anderen HTML-Elementen.
mfg omoxen
 
Werbung:
Genau das macht eval. Was ist der Unterschied zwischen eval und dem, was du suchst?
Wobei solche Lösungen in 99% der Fällen falsch ist und besser gemacht werden können.
 
also ich will das z.B. mit folgendem

<html>
<head>
</head>
<body>
<?php
print("hallo");
?>
</body>
</html>

folgendes passiert:
<html>
<head>
</head>
<body>
hallo
</body>
</html>
 
Werbung:
Überlegen ist wohl nicht deine Stärke.

function mein_eval_string(string $string) {
$string = '?>'.$string.'<?php';
}
eval(mein_eval_string('<div>Hallo</div>'));
 
Werbung:
ich glaube ihr versteht nicht ganz was ich meine.
Ich suche eine Funktion, die meinen HTML-Code mit PHP-Tags so behandelt, als ob ich ihn z.B. als Datei von meinem Browser aus aufrufe.

Also soll die Funktion die PHP-Tags herausfiltern und deren Rückgabe (also alles aus print b.z.w. echo) als string an deren Stelle stellen.

also z.B. sowas:
funktion('<h1><?php print(\'überschrift\'); ?></h1>')
gibt sowas zurück:
'<h1>überschrift</h1>'

ist doch logisch!
 
Was daran logisch, ist mir schleierhaft. Ich verstehe weder den Sinn dahinter, noch die genaue Vorgehensweise, die diese Funktion haben sollte.
Dein Beispiel würde Beispielsweise nicht einmal korrektes PHP sein, also etwas syntaxisch Falsches zu parsen wäre schwer.


Was würde aus folgenden Zeichenketten?

Code:
Hallo, das ist ein <?php echo 'Test'; ?>
Code:
test('<?php echo 'Test'; ?>')
Code:
So ein Quatsch!
<?php
class Test {
   function __construct($name) {
     echo '<br />Kann ich nur bestätigen, '.$name;
   }
}
$test = new Test('Hans');
?>
Code:
<?php
for ($i=0;$i<10;$i++) {
echo $i;
}
 
Sowas?
PHP:
<?PHP
$code = 'echo "bla".$text';

function phphighlight($code)
{
   $code="<?PHP\n".$code."\n?>";
   ob_start();
   $oldlevel = error_reporting(0);
   highlight_string($code);
   error_reporting($oldlevel);
   $buffer = ob_get_contents();
   ob_end_clean();

   return '<div>'.$buffer.'</div>';
}
echo phphighlight($code);
?>
Dann muss dein Php-Code als Text gespeichert sein, am besten zwischen Single-Quotes.
 
Werbung:
highlight_string hat einen zweiten Parameter der den Spaß mit den ob-Funktionen nicht mehr nötig macht.
 
Bis PHP4 schon, daher eine Funktion, die überall funktioniert, nicht nur auf top aktuellen Systemen.
 
Topaktuell bedeutet in diesem Fall: Neuer als 22. April 2002. ;)

omoxen schrieb:
also z.B. sowas:
funktion('<h1><?php print(\'überschrift\'); ?></h1>')
gibt sowas zurück:
'<h1>überschrift</h1>'

Mit eval dürftest du da schon was basteln können.

PHP:
<?php

function funktion($code)
{
    return eval('?>' . $code . "<?php\n");
}

funktion('<h1><?php print(\'überschrift\'); ?></h1>');

Mehr Infos siehe Kommentare zur eval-Funktion im Handbuch.

Vielleicht interessant:

- PHP: include - Manual

Keine Ahnung, wo und wie das unterstützt wird.
 
Werbung:
mermshaus, dein Beispiel kann in vielen Fällen nicht funktionieren, da eval nicht von einer Funktion aufgerufen werden kann und von dort aus im Global Scope arbeiten kann. Meistens will man ja eval benutzen, weil Variable Inhalte nötig sind, zu denen man keinen Zugang hat.
 
Ich habe auf die Frage geantwortet. *schulterzuck*

omoxen schrieb:
also z.B. sowas:
funktion('<h1><?php print(\'überschrift\'); ?></h1>')
gibt sowas zurück:
'<h1>überschrift</h1>'

Da hast du auch keinen globalen Scope. (Wieder die alte Frage, ob wir antizipieren, was der Fragesteller meinen könnte, oder ob wir uns an das halten, was er tatsächlich schreibt. ;))

Du hast aber in #5 schon praktisch dasselbe gepostet, stelle ich gerade fest. Ich habe vorhin quergelesen und dachte, in #7 würde das Problem, das bisher noch nicht gelöst wurde, noch einmal neu formuliert.

Die eigentliche Frage ist jetzt also, was gegen die Lösung aus #5/#12 spricht.

(Im Grunde alles, weil eval verwendet wird. ;) Ich denke, ich würde die Vorschau als temporäre Datei ablegen und auf dieselbe Weise einbinden wie es die echte Seite auch tut.)
 
ja, sowas.
ich hab mir aber selbst diese Funktion geschrieben:

function UseCode($string) {
$code = explode('<?php',$string);
foreach ($code as $i => &$value) {
$arr = explode('?>',$value);
if (count($arr) > 1) {
ob_start();
$editmode = true;
eval($arr[0]);
$out = ob_get_clean();
$out = strtolower($out);
$arr[0] = $out;
}
$value = implode('',$arr);
}
$string = implode('',$code);
return $string;
}
 
Werbung:
Es wäre übrigens nett, wenn du Code mit den entsprechenden BBCode-Tags auszeichnen könntest. [noparse]
Code:
oder
PHP:
[/noparse].
 
Das wird doch nichts, wenn wir nur raten, was passieren soll,

Letzter Stand von PHP 4 ist übrigens der 7. August 2008 (Erscheinungsdatum). Ich habe noch einige Server, die auch mit PHP4 bestückt sind.
Und ja, auch PHP4 kann highlight, allerdings hängt das auch noch von den Euinstellungen ab.
 
ich glaube ihr versteht nicht ganz was ich meine.
Ich suche eine Funktion, die meinen HTML-Code mit PHP-Tags so behandelt, als ob ich ihn z.B. als Datei von meinem Browser aus aufrufe.
Wenn du PHP Code mit deinem Browser aufrufst, wird der PHP Code angezeigt. Das parsen des PHP ist Sache des Servers. Im Browser kannst du keinen PHP Code ausführen.
 
Werbung:
Glaube, die Frage ist beantwortet, oder? ;)

Eine Alternative für UseCode mit Regex:

PHP:
function UseCode2($string)
{
    $new = preg_replace_callback('/<\?php(.*?)\?>/s', function ($matches) {
        ob_start();
        eval($matches[1]);
        return strtolower(ob_get_clean());
    }, $string);

    return $new;
}

sysop schrieb:
Letzter Stand von PHP 4 ist übrigens der 7. August 2008 (Erscheinungsdatum).

Ja, aber der entsprechende zweite Parameter für highlight_string wurde laut Doku bereits in PHP 4.2.0 hinzugefügt. [/nitpick]
 
Das wird doch nichts, wenn wir nur raten, was passieren soll,

Letzter Stand von PHP 4 ist übrigens der 7. August 2008 (Erscheinungsdatum). Ich habe noch einige Server, die auch mit PHP4 bestückt sind.
Und ja, auch PHP4 kann highlight, allerdings hängt das auch noch von den Euinstellungen ab.
4.2.0 Der Parameter return wurde hinzugefügt. --> 2002
 
Zurück
Oben