Можете ли вы представить файл PHP в переменную?
Если у меня есть файл hello.php, например:
Hello, <?php echo $foo; ?>!
Я хотел бы сделать что-то вроде этого в некотором php-коде:
$text = renderPhpToString('hello.php', array('foo'=>'World'));
и в итоге
$text == 'Hello, World!'
Возможно ли это со стандартным PHP 5? Очевидно, мне нужны более сложные шаблоны с циклами и т.д.
Ответы
Ответ 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
.
Ответ 2
http://www.devshed.com/c/a/PHP/Output-Buffering-With-PHP/
Буферизация вывода может быть местом начала.
Ответ 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
Вы можете сделать это с помощью буферизации вывода, но может быть лучше использовать один из многих механизмов шаблонов.