2009-12-01 3 views
4

Мне интересно, как хранить html-шаблоны в базе данных, где я могу их восстановить и вставить переменные.mysql/php - хранить шаблоны html в базе данных

Очевидно, я мог бы хранить их как php, а затем «EVAL» запись ... но я слышал, что это зло.

есть ли лучший способ? :)

редактировать:

К сожалению, я не ясно ... Я попытался упростить это, говоря HTML шаблоны ... то, что я на самом деле имел в виду небольшие встраивать-возможности HTML элементы (думаю, YouTube) .. а не весь сайт.

ответ

4

Я бы также советовал хранить HTML-код внутри базы данных. Гораздо удобнее хранить их в виде шаблонов в файловой системе и включать их или анализировать их при необходимости. Я также рекомендую использовать что-то вроде Smarty. Очень удобный инструмент, то есть.

Однако, если вы предпочитаете делать это вручную, вот что я буду делать.

Во-первых, я бы сохранил шаблон в файле в файловой системе. Если вы предпочитаете использовать базу данных, это можно сделать. Просто знайте, что база данных будет, как правило, вызывать дополнительные накладные расходы при использовании таких вещей.

Например, в случае видео YouTube:

<object width="{$width}" height="{$height}"> 
    <param name="movie" value="http://www.youtube.com/{$path}"></param> 
    <param name="allowFullScreen" value="true"></param> 
    <param name="allowscriptaccess" value="always"></param> 
    <embed src="http://www.youtube.com/{$path}" 
      type="application/x-shockwave-flash" 
      allowscriptaccess="always" 
      allowfullscreen="true" 
      width="{$width}" height="{$width}"> 
    </embed> 
</object> 

Тогда я бы просто str_replace на PHP переменные там, так же, как сам PHP делает со строками.

<?php 
$template_path = 'templates/youtube_vid.tpl'; 
$template_data = file_get_contents($template_path); 

$old = array('{$width}', '{$height}', '{$path}'); 
$new = array(425, 344, 'v/zuZB2O6orV0&hl=en_US&fs=1&'); 

echo str_replace($old, $new, $template_data); 
?> 

И это было бы так.

Вы можете, конечно, использовать <?php $width; ?>-подобные заполнители и только include шаблон, но это оставляет вас под угрозой для инъекционных атак. Это более безопасный маршрут.

+0

Я решил пойти с шириной route ... вы и scrumpy jack правы ... файловая система - это способ пойти с шаблонами. Я не вижу, как принимать данные базы данных и напрямую вставлять их с помощью эха, в любом случае менее безопасно, чем str_replacing данные в ... Я проверяю данные до того, как их сохраню ... все его числовые или числовые, достаточно простые для проверки вставка должна сделать его достаточно безопасным? – Mark

+0

Несомненно, если вы все проверяете, прежде чем включать его, он должен быть достаточно безопасным. Если имя шаблона динамическое, не забудьте проверить его на;] – Atli

1

Не нужно изобретать колесо, вы можете использовать движок templating и хранить сами шаблоны в базе данных. Лично мне нравится хранить шаблоны в файловой системе, потому что она делает вещи много проще, но ваш проект :)

2

Отметить, вам нужно сохранить шаблоны в базе данных? Это добавит тяжелую нагрузку на ваш сервер БД при каждом запросе этих шаблонов, если вы их не кешируете.

Сравните это с файловой системой, которая имеет встроенные кеши для упрощения чтения файлов.

Плюс у вас не будет потенциального отверстия безопасности, которое может исходить от использования eval().