PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eval(); ausführen mit .php dateien



Arnon77
15.06.2009, 19:24
Hallo FH'er,

ich benutze die eval(); funktion um inhalte einer .php datei zu laden und dann auszuführen. Das Problem alle php dateien haben irgendwo ein <?php, an anfang oder irgendwo später, stehen. Doch die funktion eval(); lässt ein "<?php" nicht zu den dann würd er den php code nicht ausführen.

Meine erste Idee war es das erste <?php mit nichts zu ersetzen, damit der code trozdem funktioniert. Doch das Problem ist das es einen Php error geben wird wenn z.B folgendes mit eval(); versucht wird:



<?php
eval('<i>Html</i> <?php echo 'Test';);
?>
ist ja klar! Denn wenn man sich vorstellt das <?php vor dem echo entfernt wurde geht der code nicht mehr. Irgendwo muss <?php ja anfangen. Doch ich möchte gerne unabhängig von der datei(entweder sie fängt mit html oder php an), den inhalt einer php datei einlesen und mit eval ausführen.

Wie kann ich das Problem lösen?

blackberry
15.06.2009, 19:54
Eine Möglichkeit wären Regular Expressions (RegEx)

Ich habe folgenden Code jetzt mal auf die Schnelle "zusammengeschustert".
Erwarte also bitte nicht soviel davon... der Code ließe sich z.B. austricksen, wenn man soetwas parsen möchte:

<?php
echo '?>'; // <----- hier wird abgeschnitten

echo 'TEST!'; // wird nie erreicht
?>

Naja, was soll's!

Hier ist der Code:

<?php

$data = file_get_contents('parseme.php');

$phpcode = null;
if (preg_match_all('|\<\?php(.*)\?\>|imSUs', $data, $matches) > 0)
{
foreach($matches[1] as $index => $match)
{
$phpcode .= "${match}\n";
}
}

// echo $phpcode;
eval($phpcode);

?>

Mit dieser Datei (parseme.php):

<html>

<?php

echo "Das";

?>

<i>HTML 1</i>

<?php echo " ist"; ?>

<u>HTML 2</u>

<?php echo " ein"; ?>

<?php echo " TEST!\n";
?>

</html>

erhalte ich folgende Ausgabe:

C:\Users\BlackBerry\Desktop>php a.php
Das ist ein TEST!

Das Prinzip funktioniert also.
Ich hoffe das hilft dir weiter!


mfG. BlackBerry

Arnon77
15.06.2009, 20:27
wow das hat mir wirklich sehr geholfen^^
vielen dank

achja ich wusste garnicht das man php code per console laufen lassen kann^^
danke auch dafür!