我开始创建一个系统,我(作为目前唯一的用户)将加载一个动态创建的PHP页面,其中包含一个<table>.然后,我将抓取其中的HTML <table>并将其保存以显示给网站的单独区域中的其他用户.
我的问题:这类事情要遵循哪些最佳做法?在MySQL中将HTML保存为TEXT或LONGTEXT?BLOB?甚至可能将这些数据保存为.txt文件,该文件使用PHP include()将其包含在向用户显示的文件中?
我不太确定这种事情的最佳方法,因此也是一堆问题.我对创建数据库也不太熟悉,因此,我不了解他们的优点/缺点.它看起来像使用的是MySQL数据库,这是要走的路,但我不结婚了.
注意#1:HTML 必须完整保留.所以类似的东西<div>Let's use blue for this.</div>最终不会出现<div>Let\'s use blue for this.</div>.
注意#2:我保存的表每次都是随机生成的(包括行数/列数).所以,我需要表格中的所有数据,包括所有数据<tr>和<td>'s.
MySQL和HTML文件都可以工作.您的选择应取决于数据的简单程度以及存储的数量.
一些考虑:
速度.HTML文件和include()方法会更快.文件系统是最快,最简单的数据持久性形式.
水平可扩展性.如果采用文件系统方法,则或多或少地依赖于该计算机上的磁盘.使用单独的数据库引擎,您将来可以选择在网络上的不同群集服务器上运行数据库.
元数据.您是否需要存储创建时间,用户创建HTML,其他用户查看了多少次?如果是这样,你可能只有一个现实的选择 - 一个"适当的"数据库.这可能是MySQL或NoSQL解决方案之一.
数据消费.您是否将表格完整地显示给其他用户?或者你展示它的选定部分?可能甚至是不同用户的不同部分?这会影响您存储数据的方式 - 整个表作为一个实体,或每一行作为一个实体,或每个单独的单元格.
TEXT还是LONGTEXT?当然只有在你使用SQL时才适用.回答这个问题的唯一方法是知道每个"HTML片段"要存储多少字节.请注意,您的字符编码也会影响存储的字节数.请参阅:TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT最大存储大小
另请注意,在MySQL中,每个TEXT/LONGTEXT也可能导致磁盘的I/O.
至于关注:
HTML必须完整保留.
只要你不在任何时候逃避HTML,你应该没事.乍一看,这违反了安全性最佳实践,但如果您考虑一下,"不逃避HTML"正是您想要做的.转义HTML输出的做法仅有助于消除HTML语法被解析为HTML标记(潜在的恶意),但在您的情况下,您根本不希望消除HTML语法 - 您有意想要<td>将其解析为实际的HTML表格单元格.所以不要逃避任何事情,你给出的例子永远不会发生.
请注意:虽然您没有HTML转义输出,但您仍应过滤输入.实质上,这意味着:在写入数据库之前,请检查用户输入是否确实是HTML.为了增强应用程序的安全性,为这些表格单元格中存储的内容定义规则也许是明智的 - 可能没有<iframe>或<a>允许,不允许任何style属性等.另外,请注意SQL注入 - PDO如果你是使用和准备好的语句去PHP + MySQL.