Search code examples
phpfile-get-contents

PHP file_get_contents(file.php); execute PHP code in file


I'm currently having an issue, where I have some php code in a file and calling that file from another file.

so:

index.php is calling file.php and file.php has some php code in it.

The reason I'm using file_get_contents, is that I have code in index.php that only needs to read some of the content in file.php, designated by tags. Based on teh section tag trigged by the ($_GET['identifier']); that section within the file.php is the only section displayed

Example code in file.php:

<?php
//simplified php code
var $item = "hello";
var $item2 = "Hola";
var $item3 = "おはよ";
?>

<section id="content">
<?php echo $item1; ?>  
</section>
<section id="content2">
<?php echo $item2; ?>
</section>
<section id="content3">
<?php echo $item3; ?>
</section>
?>

code in index.php:

$content = file_get_contents('file.php');
if (isset($_GET['item'])) {
$section = $_GET['item'];
} else {
$section = 'content';
}
$delimiter = '<section id="' . $section . '">';
$start = explode($delimiter, $content);
$end = explode("</section>", $start[ 1 ] );
echo $end[0];

so if the browser url shows index.php?item=content2 , it should show the content from section ID named content2, along with the PHP code in that file, executed.

currently, if I do this, nothing is displayed, and a view source, show the php code


Solution

  • To execute the code before you get the contents, you either need to include and capture the output:

    ob_start();
    include('file.php');
    $content = ob_get_clean();
    

    Or get the file by URL (probably not the best idea and not portable):

    $content = file_get_contents('http://example.com/file.php');