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

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

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

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

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

и в итоге

 $text == 'Hello, World!' 

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

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

 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 .

http://www.devshed.com/c/a/PHP/Output-Buffering-With-PHP/

Буферизация вывода может быть местом начала.

Поскольку 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(); } 

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

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