php-Code in file_get_contents prasen

con-f-use

Erfahrenes Mitglied
Hallo zusammen,

Ich stehe gerade auf der Leitung, darum frage ich einfach: Ich möchte in einer Datei den Inhalt des <body>-Tags einer anderen Datei einfügen. Aber nur den Inhalt des <body>-Tags, nicht den ganzen Inhalt - somit fällt include schonmal flach. Habe es bisher so gelöst:
PHP:
	$data = file_get_contents('lib/bla.php');
  	echo preg_replace(
  		"/.*<body>(.*)<\/body>.*/is",
  		"$1",
  		$data
 	);
Das Problem hierbei ist nur, dass er den PHP-Code, der unter umständen im <body>-Tag der anderen Datei ist nicht praset. D.h. er gibt einfach den Code so aus, wie er in der Datei steht (z.B. "<? echo 'test'; ?>" statt nur "test"). Wie könnte ich es lösen, dass der Code trotzdem geprased wird?

Danke schonmal,
G-r-uß vom con-f-use
 
Du könntest mit [phpf]eval[/phpf] arbeiten, was jedoch relativ gefährlich bezüglich des Einschleusens von Code ist.

Gruß hpvw
 
Ich würde dies so versuchen:

PHP:
ob_start();
include("lib/bla.php");
$data = ob_get_clean();
//dies ist dein Teil

      echo preg_replace(
          "/.*<body>(.*)<\/body>.*/is",
          "$1",
          $data
    );
 
Du könntest auch den ermittelten String zwischen body in eine temporäre Datei ([phpf]tempnam[/phpf]) schreiben und diese per [phpf]include[/phpf] einbinden.

Bei [phpf]eval[/phpf] ist zu beachten, dass Du zunächst den PHP-Bereich mit ?> verlassen musst, falls Dein String mit HTML-Code beginnt, da PHP bei [phpf]eval[/phpf] davon ausgeht, dass der String, den Du übergibst, nur PHP-Code enthält (siehe auch die Kommentare bei der Funktionsbeschreibung).

Gruß hpvw
 
Eigentlich sollte die eval()-Methode funktionieren. Probier mal Folgendes:
PHP:
preg_replace('/<body[^>]*?>(.*)<\x2Fbody>/ise', 'eval("?>\\1<?")', file_get_contents('lib/bla.php'));
 
Zurück