MySQL/PHP - 将HTML模板存储在数据库中

4
我想知道在数据库中存储HTML模板的最佳方法,以便能够检索它们并插入变量。显然,我可以将它们存储为PHP,然后'EVAL'记录...但我听说这是邪恶的。是否有更好的方法? :) 编辑:抱歉,我的表述不够清晰...我试图通过说HTML模板来简化它...但我真正意思是小型可嵌入HTML元素(类似于YouTube)...而不是整个网站。
3个回答

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模板,但这会让你面临注入攻击的风险。这是更安全的方法。


我决定采用 <?php $width; ?> 的方式...你和 Scrumpy Jack 是正确的...文件系统是使用模板的正确方式。我不明白直接使用 echo 将数据库数据插入是否比 str_replace 更安全...我在存储数据之前验证数据...它们都是字母数字或数字,因此在插入之前进行简单的验证应该足够安全,对吧? - Mark
当然,如果您在包含任何内容之前进行验证,那么它应该是相当安全的。如果模板名称是动态的,请记得对其进行验证;] - Atli

2

Mark,你需要将模板存储在数据库中吗?这会给你的数据库服务器增加沉重的负担,每次请求这些模板时都会如此,除非你对它们进行缓存。

与具有内置缓存以简化文件读取的文件系统相比,这种方式更为繁琐。

此外,你不会面临使用eval()可能带来的潜在安全漏洞。


1
不需要重新发明轮子,您可以使用模板引擎并将模板本身存储在数据库中。个人而言,我喜欢将模板存储在文件系统中,因为这样可以使维护变得简单得多,但这是您的项目 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接