减少静态HTML页面中的重复

时间:2009-02-07 19:36:17

标签: php html

我有一个由一堆静态HTML页面组成的网站。显然,这些(标题,菜单等)之间存在很多重复。我计划使用的托管公司支持PHP,我对此一无所知。据推测,PHP提供了某种#include机制,但是我需要对我的HTML页面进行哪些更改才能使用它?

例如,假设我有一个这样的页面

的index.html

<html>
  <head></head>
  <body>
    <h1>My Common Header</h1>
  </body>
</html>

显然我需要将公共部分移动到它自己的文件中:

header.html中

<h1>My Common Header</h1>

鉴于上面的例子(假设所有文件都在同一目录中):

  • 我在body标签中添加了什么来获取header.html?
  • 我是否需要重命名index.html或添加一些特殊标签以表明它是.php文件?
  • 我是否需要对header.html进行任何更改?

更新:我想强调一下,我的目标只是找到减少静态HTML文件重复的最低摩擦力的方法。我有点不愿意沿着服务器端包含路由,因为我还不知道我将托管文件的服务器类型(IIS / Apache),以及是否打开或关闭包含。我被吸引到PHP只是因为它是我唯一可以认为可以完成工作的东西。感谢您的回复。

谢谢, 敦尔

8 个答案:

答案 0 :(得分:6)

您不需要使用PHP来获得此功能,由于潜在的安全问题,这通常是一个坏主意。从本质上讲,你是用核弹击打一个g ..如果您没有使用动态语言,那么您正在寻找服务器端包含。

在IIS中,例如:

<!--#include virtual="file.inc"-->

请注意,您经常需要配置服务器才能使用它们,因为默认情况下此功能通常处于关闭状态。 IIS和Apache支持服务器端包括,但它们使用不同的配置。

您可以在此处找到更多信息:

Server Side Includes

编辑:我并不是说使用PHP是一个坏主意,仅仅使用PHP来包含其他文件。它通过在不需要时将PHP引入混合来创建更大的攻击面,因此当不需要PHP的功能时可能会出现安全问题。

EDIT2:我认为假设你不会因为你的身材而成为目标是一个坏主意,因此你可以忽略安全性。大多数网站都被自动蠕虫攻击,并变成恶意软件主机,垃圾邮件僵尸或盗版软件/媒体服务器。除了您可能最终参与感染他人之外,您的网站可能会被列入黑名单,并且在带宽超额费用方面可能会花费您真正的资金。我们谈的是数百或数千美元。

仅仅因为你是一个小网站并不会让你成为一个目标。只是在互联网上使你成为目标。

答案 1 :(得分:6)

您正在寻找include(或其衍生产品,例如include_oncerequirerequire_once):

<强>的header.php

<h1>My Common Header</h1>

<强>的index.php

<html>
  <head></head>
  <body>
    <?php include('header.php'); ?>
  </body>
</html>

依此类推,例如你的页脚。

答案 2 :(得分:4)

忘记在服务器上完成它。

如果 想要做的只是维护一些静态页面 - 并且预计不必真正使用PHP - 我只是使用Dreamweaver,这将允许你在您的最终创建和管理模板和可变内容。

不需要包括。不需要模板引擎。 (对于你想要完成的事情,这些都是过度的。)

答案 3 :(得分:2)

您应首先将index和header的文件扩展名更改为.php,然后您可以执行以下操作:

<html>
<head></head>
    <body>
        <? include 'header.php'; ?>
    </body>
</html>

你的header.php文件只有

<h1>My Common Header</h1>

答案 4 :(得分:1)

虽然您可以使用“include”,“require”或“require_once”指令将内容包含在一个页面中,但您可能会更好地使用Smarty等模板引擎

答案 5 :(得分:1)

虽然使用包含文件作为标题是一种解决方案,但是当我在几年前遇到问题时我走了一条不同的路线:我希望所有页面都使用相同的布局(我认为这是相当常见的;-)。因此,由于我只想更改页面的内容,因此我将页面内容作为包含的文件,并具有包含页眉和页脚的主模板文件。为了设置要包含的页面,我尝试创建非常小的PHP脚本,只设置一个变量来保存要包含的页面。在某些情况下,页面也可以通过GET参数命名。当然,这需要对该参数进行适当的验证。从长远来看,我不再需要担心HTML本身了 - 我所做的只是编写小片段(当然应该是自己完成的)。

可能更好的解决方案是使用现有的模板框架。由于我曾经有过这样的限制,我无法这样做,但是当我再次遇到同样的问题时我会这样做。

答案 6 :(得分:1)

在当天,我使用SSI(Mystere Man上面描述的“&lt;! - #include virtual =”file.inc“ - &gt;”方法)相当多的静态HTML页面,我会绝对推荐使用它。

但是,如果您想消除对是否在服务器上启用支持的不确定性,您可以在本地开发单独的文件,并在上传到服务器之前将它们合并到生成的文件中。例如,Dreamweaver支持以无缝方式执行此操作。

或者您可以使用您选择的语言中相当简单的脚本自行完成,方法是对文件中的标记进行简单的字符串替换,将{{{include-header}}}替换为“header.html”的内容文件等等。

修改

糟糕!不知何故,我没有看到克莱顿的帖子与Dreamweaver有相同的注释。

答案 7 :(得分:0)

好的,这只是一个半编程相关的问题。

PHP确实有include(),它非常易于使用,但它对未来的可维护性没有贡献。我不推荐它,特别是对于大型网站。

我是一个支持框架的人。我使用过CodeIgniter,CakePHP甚至是Smarty模板引擎。如果你认真对待PHP,请考虑CakePHP。有这种“布局”概念,您可以在其中构建主要内容的页眉,页脚,CSS,javascript 外部;例如对于“关于我们”页面,您的内容将类似于:

  

这是一个关于我们的页面,它告诉你一大堆关于我们的东西...

CakePHP获取此内容,并围绕它包装您的布局:

  


  CSS
  JavaScript的
  这是一个关于我们的页面,它告诉你一大堆关于我们的东西...
  页脚