SHTML文件介绍
什么是SHTML文件?
SHTML文件(以.shtml文件扩展名的文件)和HTML文件差不多,都是网页文件,只是SHTML文件中有服务器端包含(server-side includes,SSI)指令。它在发送到用户浏览器之前由web服务器进行处理(或解析)——把SHTML文件中包含的SSI指令解释出来,服务器传送给客户端的文件,是已经解释的SHTML,不会有SSI指令——它实现了HTML所没有的功能。
Web 服务器在处理网页的同时处理 SSI 指令。当 Web 服务器(目前最主流的三个Web服务器是Apache、 Nginx 、IIS)遇到 SSI 指令时,直接将包含文件的内容插入 HTML 网页。如果“包含文件”中包含 SSI 指令,则同时插入此文件。除了用于包含文件的基本指令之外,还可以使用 SSI 指令插入文件的相关信息(如文件的大小)或者运行应用程序或 shell 命令。
网站维护常常碰到的一个问题是,网站的结构已经固定,却为了更新一点内容而不得不重做一大批网页。SSI提供了一种简单、有效的方法来解决这一问题,它将一个网站的基本结构放在几个简单的HTML文件中(模板),以后我们要做的只是将文本传到服务器,让程序按照模板自动生成网页,从而使管理大型网站变得容易。
SSI是为WEB服务器提供的一套命令,如:
<!--#include file="info.htm"-->
就是一条SSI指令,其作用是将"info.htm"的内容拷贝到当前的页面中,当访问者来浏览时,会看到其它HTML文档一样显示info.htm其中的内容。
其它的SSI指令使用形式基本同刚才的举例差不多,可见SSI使用只是插入一点代码而已,使用形式非常简单。
说明:
<!-- -->是HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。
#include 为SSI指令之一。
file 为include的参数, info.htm为参数值,在本指令中指将要包含的文档名。
注意:<!--与#号间无空格,只有SSI指令与参数间存在空格,SSI指令是大小写敏感的。
SSI常用指令
#echo 作用:
将环境变量插入到页面中。语法:
<!--#echo var="变量名称"-->
如:
本文档名称:程序代码:
<!--#echo var="DOCUMENT_NAME"-->
当前时间:程序代码:
<!--#echo var="DATE_LOCAL"-->
你的IP地址是程序代码:
<!--#echo var="REMOTE_ADDR"-->
#include 作用:
将文本文件的内容直接插入到文档页面中。
语法:
<!--#include file="文件名称"-->
<!--#include virtual="文件名称"-->
其中
file 指定包含文件相对于本文档的位置
virtual 指定相对于服务器文档根目录的位置
补充:#include file 和 #include virtual的区别
1、#include file 包含文件的相对路径,#include virtual包含文件的虚拟路径。
2、在同一个虚拟目录内,<!--#include file="file.asp"-->和<!--#include virtual="file.asp"-->效果是相同的,但假设虚拟目录名为myweb,则<!--#include virtual="myweb/file.asp"-->也可以通过调试,但我们知道<!--#include file="myweb/file.asp"-->是绝对要报错的
#flastmod 和#fsize 作用:
前者#flastmod 文件最后一次更新日期
后者#fsize 文件的长度
如:
<!--#flastmod file="news.htm"-->
将当前目录下news.htm文件的最后一次更新日期插入到当前页面
<!--#fsize file="news.htm"-->
将当前目录下news.htm的文件大小入到当前页面
#config的作用:
主要用于修改SSI的默认设置,如用 timefmt参数定义日期和时间的使用格式:
<!--#config timefmt="%Y-%m-%d %H:%M"-->
其中,星期%A,月%B,日%d,年%Y,时%H,分%M
#exec作用:
将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入,这取决于使用的参数是cmd还是cgi。
语法:
<!--#exec cmd="文件名称"-->
<!--#exec cgi="文件名称"-->
其中
cmd 常规应用程序
cgi CGI脚本程序
如:
<!--#exec cmd="dir /b"-->
将会显示当前目录下文件列表
<!--#exec cgi="/cgi-bin/gb.cgi"-->
将会执行CGI程序gb.cgi。
特别提示,指令相当方便,但是也存在安全问题。
禁止(屏蔽)方法:
.Apache,将access.conf中的"Options Includes ExecCGI"这行代码删除;
.在IIS中,要禁用 #exec 命令,可修改 SSIExecDisable 元数据库;
SHTML文件简单例子
<html>
<head>
<meta charset="utf-8">
<title>SSI example</title>
</head>
<body>
<h2>新闻</h2>
<p><!--#include file="news.txt"--></p>
<p>最后一次更新更新日期:<!--#flastmod file="news.txt" --></p>
<!--#config timefmt="%Y-%m-%d %H:%M"-->
<p>最后一次更新更新日期(使用了格式):<!--#config timefmt="%Y-%m-%d %H:%M"-->
<!--#flastmod file="news.txt" --></p>
<p></p>
</body>
</html>
保存文件名为:example.SHTML。
其中news.txt内容你可以随便写。
我这里将example.SHTML和news.txt放到Web 服务器Apache的test2文件夹中,参见下图:
然后,在浏览器的地址栏中输入http://localhost/test2/example.SHTML,回车,效果如下: