В отличие от использования include, который выполняет включенный php в файле … возможно ли сохранить содержимое файла php в переменной – но с php все еще неповрежденным и исполняемым?
Моя цель выглядит примерно так:
$template = some_imaginary_include_function('myfile.php'); foreach($list_of_blogs as $blog) { // somehow get blog content in template and render template; }
Я знаю, что это тупой пример … но я надеюсь, что это иллюстрирует общую идею. Если мне нужно пройти через шаблон 50 раз на странице (скажем, это список блогов), кажется, что он не работает, и для каждого из них он включен.
Я ошибаюсь? Есть ли способ сделать это?
Как насчет этого…
function getTemplate($file) { ob_start(); // start output buffer include $file; $template = ob_get_contents(); // get contents of buffer ob_end_clean(); return $template; }
В принципе, это получит любой $file
и проанализирует его с помощью PHP, а затем вернет вывод в переменную.
Используя $content = file_get_contents('/path/to/your/file.php');
все теги PHP будут сохранены, вы можете затем eval()
или tokenize
их, чтобы делать все, что захотите.
Выполнение включения в цикл не является таким глупым .
Все переменные, определенные до включения, будут доступны в вашем шаблоне.
Будь проще !
== EDIT ==
Или, может быть, вы могли бы улучшить ответ alex:
function getTemplate($file, $template_params = array()) { ob_start(); // start output buffer extract($template_params); // see PHPDoc // from here $var1 will be accessible with value "value1" // so your template may contain references to $var1 include $file; $template = ob_get_contents(); // get contents of buffer ob_end_clean(); return $template; } echo getTemplate('your_template.php', array('var1' => 'value1'));
(Не так просто больше ^^)
Напишите функцию во включенном PHP-скрипте, который возвращает желаемый результат. Определите константу в основном скрипте PHP. В включенном PHP-скрипте проверьте отсутствие указанной константы и эхо возвращайте значение функции, если это так.
Несмотря на то, что он часто считается злым, вы можете попробовать использовать eval () вместе с get_file_contents()
Если вы разрабатываете в 5.3, это намного проще, но даже в 5.2 вы можете использовать так называемую анонимную функцию.
Анонимная функция позволит вам передавать код в виде переменной. Чтобы загрузить этот код из файла, вам может понадобиться file_get_bytes в строку, eval, а затем введите переменную, но вы получите то, что я надеюсь.
5.3: Анонимные функции
5.2: create_function