Как запустить PHP-код из file_get_contents или файла в функции - PullRequest
11 голосов
/ 12 декабря 2011

Я создаю свой собственный шаблон MVC, чтобы упростить процесс создания домашних страниц.Моей системе шаблонов нужен класс контроллера для вывода моих представлений.Это означает, что я должен вывести файл через функцию php.Я искал некоторое время и не могу найти решение.

Как я могу через функцию PHP запустить строку, представляющую некоторый исходный код ("<?", "<? Php", "?>" И т. Д.) Как php?Эвал не взял бы мой <?знаки (и я прочитал, что функция по какой-то причине дерьмо). </p>

Ответы [ 5 ]

24 голосов
/ 12 декабря 2011

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

ob_start();
include "template.phtml";
$out1 = ob_get_clean();

http://www.php.net/manual/de/function.ob-get-contents.php

4 голосов
/ 31 мая 2013

Замена "echo file_get_contents ()" на "include ()", как предложил GordonM, работала именно так, как нужно. не могу пока сказать, потому что я слишком новичок, но для моих нужд это прямой ответ на поставленный вопрос.

3 голосов
/ 12 декабря 2011

Просто включите () файл вместо этого должно быть хорошо. Я не копался глубоко в исходном коде, но я вполне уверен, что именно так Zend Framework реализует шаблоны.

0 голосов
/ 19 марта 2014
$code = '<?php
function GetBetween($content, $start, $end) {
  $r = explode($start, $content);
  if (isset($r[1])){
    $r = explode($end, $r[1]);
    return $r[0];
  }
  return '';
}';

function _readphp_eval($code) {
  ob_start();
  print eval('?>'. $code);
  $output = ob_get_contents();
  ob_end_clean();
  return $output;
}

print _readphp_eval($code);
0 голосов
/ 12 декабря 2011

Ну, eval - это не дерьмо само по себе, просто создать дыру в безопасности с этим, если вы не будете осторожны с тем, что вы разрешаете внутри этого eval (это, и, возможно, тот факт, что это может быть плохо для читабельности код).

Что касается знаков <?, то это потому, что eval ожидает php-код, поэтому, если вы не хотите смешивать php с простым выводом, включите только закрывающий тег ?>.

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

...