我有一个由一堆静态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>
鉴于上面的例子(假设所有文件都在同一目录中):
更新:我想强调一下,我的目标只是找到减少静态HTML文件重复的最低摩擦力的方法。我有点不愿意沿着服务器端包含路由,因为我还不知道我将托管文件的服务器类型(IIS / Apache),以及是否打开或关闭包含。我被吸引到PHP只是因为它是我唯一可以认为可以完成工作的东西。感谢您的回复。
谢谢, 敦尔
答案 0 :(得分:6)
您不需要使用PHP来获得此功能,由于潜在的安全问题,这通常是一个坏主意。从本质上讲,你是用核弹击打一个g ..如果您没有使用动态语言,那么您正在寻找服务器端包含。
在IIS中,例如:
<!--#include virtual="file.inc"-->
请注意,您经常需要配置服务器才能使用它们,因为默认情况下此功能通常处于关闭状态。 IIS和Apache支持服务器端包括,但它们使用不同的配置。
您可以在此处找到更多信息:
编辑:我并不是说使用PHP是一个坏主意,仅仅使用PHP来包含其他文件。它通过在不需要时将PHP引入混合来创建更大的攻击面,因此当不需要PHP的功能时可能会出现安全问题。
EDIT2:我认为假设你不会因为你的身材而成为目标是一个坏主意,因此你可以忽略安全性。大多数网站都被自动蠕虫攻击,并变成恶意软件主机,垃圾邮件僵尸或盗版软件/媒体服务器。除了您可能最终参与感染他人之外,您的网站可能会被列入黑名单,并且在带宽超额费用方面可能会花费您真正的资金。我们谈的是数百或数千美元。
仅仅因为你是一个小网站并不会让你成为一个目标。只是在互联网上使你成为目标。
答案 1 :(得分:6)
您正在寻找include
(或其衍生产品,例如include_once
,require
,require_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的
这是一个关于我们的页面,它告诉你一大堆关于我们的东西...
页脚