Проблема при загрузке php-файла в переменную (загрузить результат php-кода вместо кода в виде строки)

У меня есть архитектура сайта, в которой я назначаю содержимое переменным, а затем печатаю их на главной странице. Моя проблема в том, что php-код на подстраницах импортируется в переменные в виде строк. Можно ли как-то убедиться, что код действительно выполняется, а результаты вместо этого импортируются в переменные?

В приведенном ниже примере php-код в signup_header.php импортируется в виде строки в $page_header. В результате в элементе формы вместо адреса электронной почты отображается «getVerifiedEmail(); ?>».

master.php

<!DOCTYPE HTML>
<html>
<head>
    <?php echo $page_header; ?>
</head>

<body id="home">
    <div class = "container">
       <?php echo $page_content; ?>
    </div>
</body>
</html>

регистрация.php:

<?php
    $page_content = file_get_contents("./include/signup_content.php");
    $page_header = file_get_contents("./include/signup_header.php");
    include('master.php');
?>

signup_header.php

<script type="text/javascript">
   $(document).ready(function(){
   $('input[name="name"]').attr('value', "<?php echo $idpAssertion->getVerifiedEmail(); ?>");
    });        
</script>

signup_content.php

<section>
    <form class="task" method="POST">
        Name: <input type="text" name="name" maxlength="30" value=""/><br/>
        Email: <input type="text" name="email" value=""/><br/>
        UserId: <input id="userId" type="text" name="userId" value="" /><br/>
    </form>
</section>

person Mattias Wolff    schedule 28.08.2011    source источник
comment
Взгляните на мое предложение ниже, оно простое, и я думаю, что это то, что вы ищете.   -  person Michael    schedule 28.08.2011


Ответы (5)


<?php
    $page_content = "./include/signup_content.php";
    $page_header = "./include/signup_header.php";
    include('master.php');
?>

и

<!DOCTYPE HTML>
<html>
<head>
    <?php include $page_header; ?>
</head>

<body id="home">
    <div class = "container">
       <?php include $page_content; ?>
    </div>
</body>
</html>

это все

Я надеюсь, что signup_content.php содержит только похожий шаблон

person Your Common Sense    schedule 28.08.2011

Использование file_get_contentsДокументы вернет фактическое содержимое файла. Но вместо этого вы хотите выполнить файл. Вы можете использовать includeДокументы для выполнения файла php. , однако чаще всего этот файл уже сам создает вывод. Это, вероятно, не то, что вы хотите.

Вместо этого вы все еще можете использовать include, но перехватывать вывод в буфер. Это называется буферизация вывода Документы .

Чтобы сделать это более доступным для вашей программы, вы можете создать небольшую вспомогательную функцию, которая обрабатывает детали. Затем вы можете просто вызвать эту функцию, которая будет включать рассматриваемый файл и возвращать фактический результат. Затем вы можете присвоить возвращаемое значение своим переменным.

Пример:

<?php
    /**
     * include_get_contents
     *
     * include a file and return it's output
     *
     * @param string $path filename of include
     * @return string
     */
    function include_get_contents($path)
    {
        ob_start();
        include($path);
        return ob_get_clean();
    }

    $page_content = include_get_contents("./include/signup_content.php");
    $page_header = include_get_contents("./include/signup_header.php");
    include('master.php');
?>

Связано: Ответ на Изменение существующей функции PHP для возврата строки

person hakre    schedule 28.08.2011

file_get_contents возвращает фактическое содержимое файла, вам нужно include, что на самом деле анализирует файл PHP.

person Peter Kruithof    schedule 28.08.2011
comment
Проблема в том, что содержимое include выводится моментально, а не в ту переменную, где мне нужно. - person Mattias Wolff; 28.08.2011

в signup.php использовать

<?php
$page_content = include("./include/signup_content.php");
$page_header = include("./include/signup_header.php");
include('master.php');
?>

это то, что вам нужно.

person Michael    schedule 28.08.2011
comment
Проблема в том, что содержимое include выводится моментально, а не в ту переменную, где мне нужно. - person Mattias Wolff; 28.08.2011
comment
@Mattias, зачем тебе хранить это в переменной? - person Michael; 28.08.2011

использование может использовать функцию eval

http://php.net/manual/en/function.eval.php

$string = eval('?'.'>'.file_get_contents('signup_content.php',1).'<'.'?');
echo $string;
person Saeed    schedule 28.08.2011