3.7 SSI设置
SSI(Server-side Include)是直接嵌入在HTML页面的指令。从字面上就可以看出,它是由Web服务器提供的一种功能,并且是在服务器端进行的。
3.7.1 SSI简介
一般说来,要完成较复杂的任务(如:聊天室或留言本等),必须设计专门的CGI或ASP程序;但是如果只是想给网页加上简单的功能(如显示一篇文档、Web服务器环境变量、关于该文档的更新日期和大小等),则只要SSI就可以完成了。SSI则是直接由服务器解释执行的,需要Web服务器软件支持SSI。而且,由于直接在服务器端执行SSI,产生相应HTML代码;所以对客户端没有限制,不会产生因为不同浏览器而产生不同的观看效果。当页面发送到Web客户时服务器解析该指令,其可用于包含其他文件、程序的输出或者环境变量。目前,主要有以下几种用途。
● 显示服务器端环境变量<#echo>。
● 将文本内容直接插入到文档中<#include>。
● 显示WEB文档相关信息<#flastmod #fsize>(如文件制作日期/大小等)。
● 直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)。
● 设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式)。
3.7.2 启用SSI
启用SSI最常用的方法是,指定具有某种扩展名(通常为.shtml)的文件在使用时由服务器解析。
# AddType allows you to add to or override the MIME configuration # file mime.types for specific file types. # //将只对.shtml扩展名的文件解析SSI指令 AddType text/x-server-parsed-html .shtml //对所有HTML文档解析SSI指令 #AddType text/x-server-parsed-html .html
也可以使用XbitHack指令指示是否让服务器解析SSI指令。设置XbitHack为on即可让服务器对所有具有可执行属性的文件解析。
3.7.3 SSI指令
SSI指令基本格式为:<!--指令名称=“指令参数”>
下面分别对其指令的用途进行介绍。
1.#echo指令
echo指令用于将环境变量插入到页面中。其语法为:
<!--#echo var=“变量名称”-->。
例如:<!--#echo var=“DOCUMENT_NAME”-->将显示当前文档名;<!--#echo var=“DATE_LOCAL”-->语句将显示当前服务器日期;<!--#echo var=“REMOTE_ADDR”-->语句显示客户IP地址。
可在SSI中使用的变量主要有三种:只在SSI中能使用的变量、标准CGI变量和某些服务器支持的变量。表3-6列出了标准SSI支持的变量。
表3-6 标准SSI支持的变量
表3-7列出了所有标准的CGI变量:
表3-7 标准CGI变量
2.#include指令
include指令用于将文本文件的内容直接插入到文档页面中。其语法为:
<!--#include file=“文件名称”--> <!--#include virtual=“文件名称”-->
其中:file用于指定文件名,文件名只包含一个相对路径,该路径是相对于使用#include指令的文档所在的目录。被包含文件可以在include指令所在文档的同一级目录或其子目录中,但不能在其上一级目录中。如表示当前目录下的helloworld.htm文档,则为file=“helloworld.htm”。
virtual表示指定的文件名是Web站点上的虚拟目录,而不是绝对路径,也不是当前使用#include指令的文档所在的目录。虚拟目录的设置也可以在httpd.conf文件中完成。例如表示相对于服务器文档根目录下hello目录下的helloworld.htm文件;则为file=“/hello/helloworld.htm”。
★ 注意 ★
1.文件名称必须带有扩展名。2.被包含的文件可以具有任何文件扩展名。
3.#flastmod和#fsize指令
#flastmod和#fsize指令用于显示文件的两个最常用属性:最近更新时间和大小。其中#flastmod用于显示文件的最近更新日期;#fsize用于显示文件的大小。这两条指令的语法为:
<!--#flastmod file=“文件名称”--> <!--#fsize file=“文件名称”-->
其中:file用于指定包含文件相对于本文档的位置,如info.txt表示当前目录下的info.txt文档。也可以用virtual指定包含相对于服务器虚拟目录的完整目录的文件名,如/hoyi/info.txt。
例如:
<!--#flastmod file=“news.htm”-->语句将当前目录下news.htm文件的最近更新日期插入到当前页面。而语句<!--#fsize file=“news.htm”-->将当前目录下news.htm的文件大小入到当前页面。
4.#exec指令
exec指令用于将某一外部程序的输出插入到页面中。既可将CGI程序的显示结果插入到当前文档,也可以将常规应用程序的输出结果显示到当前文档,这取决于使用的参数是cmd还是cgi。若使用参数cmd将常规应用程序的输出结果显示到当前文档,若使用参数cgi将CGI程序的输出结果显示到当前文档。该指令的语法为:
<!--#exec cmd=“文件名称”--> <!--#exec cgi=“文件名称”-->
其中,参数cmd用于显示常规应用程序的输出结果;参数cgi用于显示CGI脚本程序的输出结果。例如<!--#exec cmd=“cat /etc/passwd”-->语句将会在当前文档显示密码文件的内容;而语句<!--#exec cmd=“dir /b”-->将会显示当前目录下文件列表。语句<!--#exec cgi=“/cgi-bin/gb.cgi”-->将会执行CGI程序gb.cgi,并将程序的显示结果显示在当前文档。
用户为了安全起见,也可以禁止本指令的执行。要禁止该指令的执行,只要将在Apache的配置文件中的“Options Includes ExecCGI”这行代码删除。
5.#config指令
.#config指令用于指定返回给客户端浏览器的错误信息、日期和文件大小的格式。其语法为:
<!--#config errmsg=“自定义错误信息”--> <!--#config sizefmt=“显示单位”--> <!--#config timefmt=“显示格式”-->
其中:参数errmsg表示自定义SSI执行错误信息,可以为用户喜欢的任何方式;sizefmt指明文件大小显示方式,默认为字节方式,也可以改为千字节方式。timefmt时间显示方式,其配置方式如表3-8所示:
表3-8 timefmt的显示方式
6.#XSSI指令
XSSI(Extended SSI)指令是一组高级SSI指令,内置于Apache 1.2或更高版本的mod-include模块之中,表3-9列出了关于XSSI的条件表达式。其中可使用的指令有:
表3-9 关于XSSI的条件表达式
● #printenv:打印当前存在于WEB服务器环境中的所有环境变量的值;
● #set:设置环境变量的值;
● #if:创建可以改变数据的页面,这些数据根据使用if语句时计算的要求予以显示。
其中:#printenv指令的语法为:<!--#printenv-->。不带任何参数;#set指令语法为:<!--#set var=“变量名”value=“变量值”-->,例如<!--#set var=“color”value=“红色”-->。#if指令的语法为:<!--#if expr=“$变量名=\“变量值A\””-->。例如:<!--#if expr=“$变量名=\“变量值B\””-->。