Прочитать код PHP и занести его в переменную

Рейтинг: 0Ответов: 2Опубликовано: 27.12.2014

Здравствуйте. Есть страничка:

<html>
<head>
    <title>Мой сайт</title>
    <meta charset="utf-8">
</head>
<body>

<center><h1>ЭТО ЗАГОЛОВОК</h1></center>
<div>Этот блок сверху</div>

<?php echo $data; ?>

<div>Этот блок снизу</div>
</body>
</html>

И есть переменная $data, в которой я хотел бы хранить код view, которая подгружается в зависимости от $_GET запроса (т.е. если $_GET['p] == 'index', то вызвать index.php). Я пытаюсь сделать так:

public function render($file){
        $path = app."/views/".$file.".php";
        if(file_exists($path)){
            $data = file_get_contents($path);
            require(app."/layouts/main.php");
        }
    }

P.S. Где $file - это значение $_GET['p].

С обычным текстом всё отлично, всё выводит, а вот если я там напишу PHP код, то его он уже игнорит. :( Подскажите, что я делаю не так и в какую сторону копать.

Ответы

▲ 1

Вместо file_get_contents() может, include использовать?

<?php
switch( filter_input( INPUT_GET, "p", FILTER_SANITIZE_STRING)){
    case "index":
        include("index.php");
        break;
    case "contacts":
        include("contacts.php");
        break;
    default:
        echo "Page not found";
}
?>
▲ 1

PHP код не может интерпретироваться внутри переменной, если только разными извращёнными способами. Шаблонизаторы делаются по-другому. Либо смотрите архитектуру MVC (где шаблонами с html являются файлы-вьюшки, в которых можно использовать PHP код). Либо делайте макросы. Нужно например вывести список статей, будет выглядеть так: %get_articles(различные аргументы, файл шаблона одной статьи)%. Потом интерпритируйте свои макросы. Но стоит, пожалуй, использовать уже готовые вещи, например Smarty.