2009-12-01 51 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

我決定去<?php $ width; ?>路線......你和傑克傑克是正確的......文件系統是模板去的方式。我沒有看到如何獲取數據庫數據,並直接插入它與回聲反正不太安全,然後str_replacing數據...我存儲它之前驗證數據...它的所有字母數字或數字,所以一個足夠簡單的驗證之前插入應該足夠安全嗎? – Mark 2009-12-02 15:10:57

+0

當然,如果在包含它之前驗證所有內容,它應該是相當安全的。如果模板名稱是動態的,請記住將其驗證爲;] – Atli 2009-12-02 19:01:58

1

無需重新發明輪子,您可以使用templating引擎並將模板本身存儲在數據庫中。我個人喜歡在文件系統中存儲模板,因爲它使更容易維護,但它的項目:)

2

Mark,您是否需要將模板存儲在數據庫中?每次請求這些模板時,這會給數據庫服務器增加沉重的負擔,除非您緩存它們。

將此與具有內置高速緩存的文件系統進行比較以簡化文件讀取。

此外,您不會有可能來自使用eval()的潛在安全漏洞。