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

У меня есть архитектура сайта, в которой я назначаю содержимое переменным, а затем распечатываю их на главной странице.Моя проблема заключается в том, что 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>

signup.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>

Ответы [ 5 ]

3 голосов
/ 28 августа 2011

Использование file_get_contents Документы вернет фактическое содержимое файла.Но вместо этого вы хотите выполнить файл.Вы можете использовать include Docs для выполнения файла 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 наВернуть строку

2 голосов
/ 28 августа 2011

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

1 голос
/ 28 августа 2011
<?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 содержит только похожий шаблон

0 голосов
/ 28 августа 2011

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

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

$string = eval('?'.'>'.file_get_contents('signup_content.php',1).'<'.'?');
echo $string;
0 голосов
/ 28 августа 2011

в signup.php используйте

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

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

...