LAMP网站开发黄金组合Linux+Apache+MySQL+PHP
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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\””-->。