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

Имам архитектура на сайт, където присвоявам съдържание на променливи и след това ги отпечатвам в основна страница. Проблемът ми е, че php кодът в подстраниците се импортира в променливите като низове. Има ли все пак да се уверите, че кодът действително се изпълнява и вместо това резултатите се импортират в променливите?

В примера по-долу php кодът в signup_header.php е imorted като низ към $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>

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

use може да използва функцията 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