PHP file_get_contents с php без изменений? - PullRequest
8 голосов
/ 14 января 2010

В отличие от использования 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 раз просмотреть шаблон на странице (скажем, это список блогов), кажется, что на самом деле глупо его запускать и включать для каждого.

Я не прав? Есть ли способ сделать это?

Ответы [ 6 ]

19 голосов
/ 14 января 2010

Как насчет этого ...

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, а затем вернуть вывод в переменную.

4 голосов
/ 14 января 2010

Используя $content = file_get_contents('/path/to/your/file.php');, все теги PHP будут сохранены, затем вы можете eval() или tokenize сделать их так, как вам хочется.

1 голос
/ 14 января 2010

Включение в цикл не ТАК тупой .

Все переменные, определенные до включения, будут доступны в вашем шаблоне.

Будьте проще!

== РЕДАКТИРОВАТЬ ==

Или, может быть, вы могли бы улучшить ответ Алекса:

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'));

(Уже не так просто ^^)

0 голосов
/ 14 января 2010

Если вы разрабатываете в 5.3, это намного проще, но даже в 5.2 вы можете использовать для этого так называемую анонимную функцию.

Анонимная функция позволит вам передавать код в виде переменной. Чтобы загрузить этот код из файла, вам может понадобиться file_get_bytes в строку, оценить его, затем вставить в переменную, но вы получите точку, я надеюсь.

5.3: Анонимные функции

5.2: create_function

0 голосов
/ 14 января 2010

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

0 голосов
/ 14 января 2010

Написать функцию во включенном скрипте PHP, которая возвращает желаемый результат. Определите константу в основном скрипте PHP. Во включенном PHP-скрипте проверьте отсутствие указанной константы и отобразите возвращаемое значение функции, если это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...