За последние 24 часа нас посетил 54181 программист и 1723 робота. Сейчас ищут 854 программиста ...

Вставка теплейта в страницу с php кодом.

Тема в разделе "Прочие вопросы по PHP", создана пользователем Donald, 22 окт 2015.

  1. Donald

    Donald Новичок

    С нами с:
    13 окт 2015
    Сообщения:
    31
    Симпатии:
    0
    Есть некий текстовый темплейт файл tpl.html, который подгружается, обрабатывается и выводится посредством echo в тело документа:
    Код (PHP):
    1. <?php
    2. $tpl = file_get_contents('tpl.html');
    3. //тут $tpl многократно изменяется, размножается и т.д.
    4. echo $tpl;
    5.  
    Если в tpl.html будут вставки php кода, то они выведутся как текст в документ. Можно ли как-то вывести текст и исполнить php вставки?

    Например, содержимое tpl.html
    Код (PHP):
    1. Page name <h1><?=$h1?></h1>, page text <?php include "bar.php"; ?> ...
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Использовать include или require вместо file_get_content. Единственное, чтоб потом изменять что-то, то перед include используйте ob_start(), а после - ob_get_content() и ob_clean()
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    лучше так не делать, в html НЕ хранить РНР, а хранить только в РНР.

    Добавлено спустя 1 минуту 15 секунд:
    т.к. на одном сервере может быть включена обработка кода РНР в html файлах, а на другом сервере - нет.
    соответственно на разных серверах результаты могут быть разными.
     
  4. Donald

    Donald Новичок

    С нами с:
    13 окт 2015
    Сообщения:
    31
    Симпатии:
    0
    Это справедливо только для случая, если подобные файлы хранятся открыто. В моём случае html выбран обосновано, так как это темплейты, коотрые периодически надо редактировать, но не исполнять.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    раз их не надо исполнять, в них не должно быть PHP.
         — К.О.
     
  6. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    вот да, что я хотел сказать но как то у меня это не получилось.
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    разработчики популярных шаблонизаторов специально делают так, чтобы вставки php-кода в шаблоне НЕ работали. они считают это достоинством!
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    artoodetoo и VLK, вы просто придираетесь. Donald, сделай расширение phtml, как в Zend Framework, и от тебя отстанут :))) Правда, по сути, конечно, если там есть исполняемый код, то эти файлы надо исполнять, независимо от того, там инструкции по выводу или по работе с БД. Вот решение более подробно
    Код (PHP):
    1. include 'tpl.html';
    2. $tpl = ob_get_clean();
    3. //тут $tpl многократно изменяется, размножается и т.д.
    4. echo $tpl;
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Теперь скажите mkramer и Donald, почему бы этому файлу не присвоить расширение .php, раз мы хотим его использовать как .php ? Мы что, не хотим чтобы наш редактор подсвечивал нам синтаксис и указывал на ошибки? )))
    Может быть потому, что к нему можно обратиться напрямую с адресной строки? Ну тогда это вдвойне плохо, т.к. содержимое php скрипта будет видно всем.

    Наоборот, есть такая практика давать расширение .php НЕ-пехапэшным файлам, чтобы его нельзя было подсмотреть. Типа конфиг в формате .ini, замаскированный под .php:
    Код (PHP):
    1. ;<? exit(); ?>
    2.  
    3. db_server = "localhost"
    4. db_user = "john"
    5. db_password  = "tiger"
    При попытке обратиться к http://example.com/config.php посетитель увидит только ";". А в теле приложения мы спокойно читаем его: $ini_config = parse_ini_file('config.php');
     
  10. Donald

    Donald Новичок

    С нами с:
    13 окт 2015
    Сообщения:
    31
    Симпатии:
    0
    Темплейты лежат даже не в условной www директории сервера, а уровнем выше, куда сервер из http не смотрит.

    Короче, html расширение выбрано обосновано. Честно, пробовал и видел разные варианты расширений в данном контексте. Это мнголетний опыт использования шаблонов в данном месте. Точка.
    mkramer спасибо, понял.
     
  11. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Плохая практика )
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Не плохая, а имеющая свою нишу. Позволяет снизить требования по деплою до 0. Не понадобится ни объяснять как закинуть скрипты выше document root, ни прав на конфиг сервера, и не полагается на .htaccess… Конечный вебадмин просто заливает дистрибутив на любой хостинг и начинает пользоваться. Просто и безопасно.