北大青鸟

首页 > 数据库技术教程

站内公告

服务器端包含的入门相关技术

责任编辑:宏鹏来源:武汉北大青鸟鲁广校区时间:10-15
导读:武汉北大青鸟鲁广校区:服务器端包含提供了一种对现有HTML文档增加动态内容的方法。本文针对服务器端包含(Server Side Includes),通常简称为SSI,讨论如何配置服务器以允许SSI,并介绍一

武汉北大青鸟鲁广校区:服务器端包含提供了一种对现有HTML文档增加动态内容的方法。本文针对服务器端包含(Server Side Includes),通常简称为SSI,讨论如何配置服务器以允许SSI,并介绍一些对现有HTML页面增加动态内容的基本SSI技术。本文后部将讨论用SSI做一些应该算比较的事情,比如SSI指令中的条件语句。

什么是SSI?

SSI (Server Side Includes)是HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。

对什么时候用SSI,而什么时候用某些程序生成整个页面的权衡,取决于页面中有多少内容是静态,有多少内容需要在每次页面被提供时重新计算。SSI是一种增加小段信息的好方法,诸如当前时间。如果你的页面大部分是在被提供时生成的,那就要另找方案了。

配置服务器以允许SSI

要使服务器允许SSI,必须在httpd.conf文件或.htaccess文件中有如下配置:

Options +Includes

告诉服务器以允许解析文件中的SSI指令。注意,在多数配置中,多个Options指令会互相覆盖,所以,可能必须对需要SSI的特定目录使用Options,以确保位于后并起作用。

并不是所有文件中的SSI指令都会被解析,所以,必须告诉Apache应该解析哪些文件。有两种方法,使Apache解析带有特定文件后缀的任何文件,比如.shtml, 配置如下:

AddType text/html .shtml

AddOutputFilter INCLUDES .shtml

这种方法的缺点之一是,为了使文件名有.shtml后缀从而执行其中的指令,可能需要改变加入SSI指令的现有的文件,以及所有指向此页面的连接。

另一种方法是,使用XBitHack指令:

XBitHack on

XBitHack告诉Apache解析有执行权限的文件中的SSI指令。如此,只要用chmod使文件变成可执行的,就可以对现有的页面增加SSI指令。

chmod +x pagename.html

这里简要说明一点:偶然会有人向你,无须用带.shtml的文件名,使Apache解析所有.html文件的SSI就可以了。那些人可能没听说过XBitHack。要知道,这样做会使Apache在发送文件到客户端之前通读此文件,即使其中并没有任何SSI指令,从而对速度有不小影响,所以这并不是好办法。

当然,在Windows上,没有对应的执行权限可以设置,但还是应该谨慎选择。

按缺省配置,Apache不会为SSI页面发送后修改日期或者内容长度的HTTP头,因为这些值对动态页面来说难以计算。这样会阻止页面被缓冲,导致客户端性能有能够感觉到的下降。有两种解决方法:

使用XBitHack Full配置。它告诉Apache判断后修改日期时,只查看被请求的文件本身的日期,而忽略其中包含的任何文件的修改日期。

使用mod_expires提供的指令为文件设置一个明确的过期时间,并告诉浏览器和代理这个文件可以被缓冲。

基本SSI指令

SSI指令有如下语法:

<!--#element attribute=value attribute=value ... -->

其格式很象HTML的注释,因此如果没有正确配置SSI,它会被浏览器忽略,但在HTML代码中仍然可见。而如果正确配置了SSI,则此指令会被其结果替代。

其中的元素可以有许多,我们会在下一个版本的文档中讨论其中的大多数,而在这里,举几个SSI的例子。

今天的日期

<!--#echo var="DATE_LOCAL" -->

echo元素是反馈一个变量的值。标准变量有许多,其中包含对CGI程序有效的所有的环境变量。另外,你也可以用set元素定义你的专用变量。

如果你不喜欢日期的这种打印格式,可以用config元素的timefmt属性,改变其格式。

<!--#config timefmt="%A %B %d, %Y" -->

Today is <!--#echo var="DATE_LOCAL" -->

文件的修改日期

This document last modified <!--#flastmod file="index.html" -->

这个元素也是使用timefmt的格式配置。

包含一个CGI程序的输出

这是SSI的很常见的一个用途-包含一个CGI程序的输出,比如人人喜欢的``点击计数器。

<!--#include virtual="/cgi-bin/counter.pl" -->

附加的例子

以下是一些对HTML文档使用SSI的特殊例子。

文档是什么时候被修改的?

此前,我们提到过可以用SSI通知用户文档是什么时候被修改的,但是其具体实施方法却基本上是个问题。以下代码,放在HTML文档中,会在页面中产生一个时间戳,当然,先,你必须按上述方法使SSI有效。

<!--#config timefmt="%A %B %d, %Y" -->

This file last modified <!--#flastmod file="ssi.shtml" -->

不用说,你应该用你实际引用的文件名来替换ssi.shtml,所以,如果你想简单地在任何文件中粘贴一段通用代码以达到这个目的,这个方法就并不方便,如此,就会用到LAST_MODIFIED变量:

<!--#config timefmt="%D" -->

This file last modified <!--#echo var="LAST_MODIFIED" -->

有关timefmt格式的细节,可以到搜索站点查找strftime,其语法是相同的。

包含一个标准注脚

如果你管理一个拥有许多页面的站点,你会发现对所有页面做改动是很痛苦的,尤其是在试图对所有页面维持某种标准观感的时候。

使用包含一个页眉和/或注脚的方法,可以减轻修改的负担。你只要制作一个注脚文件,并用includeSSI命令包含到每个页面,即可。include元素能按file属性或者virtual属性判断应该包含的文件。file属性是一个相对于当前目录的文件路径,即不能是一个文件路径(以/开头)。virtual属性可能更有用,它是一个相对于被提供文档的URL,可以以/开头,但必须与被提供文档在同一个服务器。

<!--#include virtual="/footer.html" -->

SSI指令和注脚文件相结合使用是很有用的,比如在注脚文件中使用LAST_MODIFIED指令。SSI指令可以出现在包含文件中,而include可以嵌套,即一个包含文件可以包含另一个。

其他的设置

config除了能设置时间格式,还有两种用途。

当SSI指令发生错误时,会产生如下消息:

[an error occurred while processing this directive]

为了改变消息的形式,可以使用config元素的errmsg属性:

<!--#config errmsg="[It appears that you dont know how to use SSI]" -->

当然,终用户永远也不会看到这个消息,因为在网站投入运行之前你已经把这些问题都解决了(是吗?)。

还可以使用config的sizefmt属性设置返回的文件大小的格式,或者是以字节为单位,或者是以Kb或Mb为单位的简写。

执行命令

我期望未来几个月内能再写一篇小型CGI程序使用SSI的文章,而这里,介绍exec的使用。SSI确实可以利用shell(/bin/sh,地说,还可以是Win32中的DOS shell)来执行命令。下例产生一个目录列表:

<pre>

<!--#exec cmd="ls" -->

</pre>

在Windows中:

<pre>

<!--#exec cmd="dir" -->

</pre>

你可能会发现,在Windows中这个指令的结果有些奇怪,dir的输出中包含有字串``<dir>,它会使浏览器产生混淆。

注意,这个功能是度危险的,因为它会执行任何包含在exec标记中的命令。如果用户有可能修改你的网页内容,比如"留言本",那么你一定要关闭这个功能。在Options指令中加上IncludesNOEXEC参数,以关闭exec功能,同时又保留SSI。

SSI技术

除了分离内容,Apache SSI还可以设置用以比较和条件表达式的变量。

警告

本文中讨论的大多数功能在Apache 1.2及更新版本中有效。如果你运行的不是Apache 1.2及更新版本,请立刻或者尽快升级,现在就动手,我们会等你弄好了再继续往下讲。

设置变量

使用set指令可以设置变量以备后用,其语法是:

<!--#set var="name" value="Rich" -->

除了设置文字变量以外,还可以设置其他任何变量,比如环境变量和此前提到过的一些变量(如LAST_MODIFIED),作为你的专用变量。在变量名前面缀以$,表示它是一个变量,而不是一个文字性字串。

<!--#set var="modified" value="$LAST_MODIFIED" -->

在文字性字串中使用$,必须使用转义符号

<!--#set var="cost" value="$100" -->

后,如果要在较长的字串中,可以用花括号把变量名括起来,以免变量名与其他字符之间冲突而产生混淆(要对这种情况举例说明有点难度,但还是希望你能领会)。

<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->

条件表达式

有了变量,就可以设置和比较它们的值以表示条件,SSI也因此成为一种简洁的编程语言。mod_include提供了if, elif, else和endif等结构以构造条件语句,从而对一个实在的页面高效地生成多个逻辑的页面。

条件的结构如下:

<!--#if expr="test_condition" -->

<!--#elif expr="test_condition" -->

<!--#else -->

<!--#endif -->

test_condition可以是任何逻辑比较 - 可以是一个值和另一个值比较,也可以是测试一个特定的值是否为"真"(一个给定的字串如果非空则为真)。完整的比较操作符列表,见mod_include。以下是可能会用到的一些例子。

在配置文件中,可以这样设置:

BrowserMatchNoCase macintosh Mac

BrowserMatchNoCase MSIE InternetExplorer

如果客户端在Macintosh上运行Internet Explorer,则上例设置环境变量``Mac 和``InternetExplorer为真。

然后,在允许SSI的文档中,可以这样设置:

<!--#if expr="${Ma

想了解更多技术请来校进行技术探讨,咨询热线:13125006136

    看过该数据库技术教程的还看过

本文标题:服务器端包含的入门相关技术,责任编辑:宏鹏,来源:武汉北大青鸟鲁广校区栏目,于10-15发布于北大青鸟鲁广校区。武汉北大青鸟鲁广校区:服务器端包含提供了一种对现有HTML文档增加动态内容的方法。本文针对服务器端包含(Server Side Includes),通常简称为SSI,讨论如何配置服务器以允许SSI,并介绍一

专业老师指导

赵老师

赵老师

从事IT教育培训十年有余,致力于帮助广大学子找到适合自己的专业

立即在线咨询

培训咨询客服

陈老师

陈老师

IT培训专业客服,用自己的真诚解决了无数学子的困惑

立即在线咨询

本文地址:https://m.027hpedu.com/html/810.html

文章标题:服务器端包含的入门相关技术

上一篇:

下一篇:

热点关注

推荐数据库技术教程

热门数据库技术教程

初中生
高中生
大学生
打工者
男生
女生

预约你的精彩未来

预约将免费领取7天课程体验卡

-------请选择试预约课程-------

JAVA
WEB前端
PHP
UI设计
Python
电子商务
视频剪辑
大数据工程师
平面设计

83345人已领取

全国百余家校区

只为您方便就学

北大青鸟鲁广校区

北大青鸟鲁广校区

武汉市洪山区珞喻路724号(地铁二号线光谷广场站F口出)

预约到校
领取学习大礼包

首页

热门课程

视频网课

新闻资讯

关于学校

联系学校

预约选课申请

  • 预约时间

    请选择预约时间

  • 预约课程

    请选择预约课程

  • 姓   名
  • 手机号
  • QQ 号
  • 微信号

添加老师微信号

专业老师24小时1对1学习指导

定制专属于你的专属学习方案

微信号:17740513250

复制老师的微信号

复制成功啦

快去微信添加老师为好友吧~

北大青鸟小青

微信号:17740513250

北大青鸟小青

微信号:17740513250

设置备注
小主知道啦