Подтвердить что ты не робот

Можете ли вы представить файл PHP в переменную?

Если у меня есть файл hello.php, например:

Hello, <?php echo $foo; ?>!

Я хотел бы сделать что-то вроде этого в некотором php-коде:

$text = renderPhpToString('hello.php', array('foo'=>'World'));

и в итоге

$text == 'Hello, World!'

Возможно ли это со стандартным PHP 5? Очевидно, мне нужны более сложные шаблоны с циклами и т.д.

4b9b3361

Ответ 1

Вы можете использовать некоторую функцию следующим образом:

function renderPhpToString($file, $vars=null)
{
    if (is_array($vars) && !empty($vars)) {
        extract($vars);
    }
    ob_start();
    include $file;
    return ob_get_clean();
}

Он использует функцию управления выходным буфером ob_start() для буферизации следующего вывода до тех пор, пока его не вернет ob_get_clean().

Изменить. Убедитесь, что вы проверяете данные, переданные этой функции, так что $vars не имеет элемента file, который переопределяет переданное значение аргумента $file.

Ответ 3

Как сказал Gumbo, вам нужно проверить переменную $file, ее тонкую ошибку, которая уже укусила меня. Я бы использовал func_get_arg (i) и не имел никаких переменных вообще, и второстепенное, я бы использовал require.

function renderPhpToString( )
{
    if( is_array( func_get_arg(1) ) ) {
        extract( func_get_arg(1) );
    }
    ob_start();
    require func_get_arg( 0 );
    return ob_get_clean();

}

Ответ 4

относительно передачи $vars = array('file' => '/etc/passwd');, вы можете использовать extract($vars, EXTR_SKIP);

Ответ 5

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