SHTML服务器端包含入门

作者: 2010-08-25,02:30 上午 周三

  SSI是嵌入HTML页面中的指令,在页面被提供时由服务器进行运算,以对现有HTML页面增加动态生成的内容,而无须通过CGI程序提供其整个页面,或者使用其他动态技术。
  至于什么时候应当用SSI ,而什么时候应当用某些程序生成整个页面,取决于页面中有多少内容是静态的,又有多少内容需要在每次页面被提供时重新计算。SSI是一种增加小段动态信息的好方法,比如当前时间。如果你的页面大部分内容是在被提供时动态生成的,那就要另找方案了。
  最近一直使用Apache 2.2以上的版本,由于配置文件做调整,启用SSI的时候走了写弯道,记录下!^_^
  要使服务器允许SSI ,必须在httpd.conf或.htaccess文件中有如下配置:
   Options +Includes
  这样就告诉服务器允许解析文件中的SSI指令。注意,在多数配置中,多个Options指令会互相覆盖,所以可能需要对使用SSI的目录专门使用一个Options指令,以确保其有效。
  并非所有文件中的SSI指令都会被解析,必须告诉Apache应该解析哪些文件。有两种方法使Apache解析带有特定后缀名的文件,比如:.shtml ,配置如下:
   AddType text/html .shtml
  AddOutputFilter INCLUDES .shtml


SSI基本指令

  1. SSI指令的语法格式如下:
    1
    <!--#element [attribute=value] [attribute=value] ... -->

    这些指令以HTML注释的形式出现,所以如果你没有正确设置SSI,浏览器会忽略这些指令。如果你正确设置了SSI,这些指令会被相应的结果替换。

  2. config
    1
    <!--#config timefmt="%B %Y" -->

    config用来指定返回给客户端浏览器的错误信息、日期和文件大小的格式。
    常用指令:

    1
    2
    3
    <!--#config errmsg="自定义错误信息"-->
    <!--#config sizefmt="显示单位"-->
    <!--#config timefmt="显示格式"-->

    参数:
    errmsg 自定义SSI执行错误信息,可以为任何你喜欢的方式。
    sizefmt 文件大小显示方式,默认为字节方式(“bytes”)可以改为千字节方式(“abbrev”)
    timefmt 时间显示方式,最灵活的配置属性。
    例子:

    1
    2
    <!--#config errmsg="服务器执行错误,请联系管理员 yiho@126.com,谢谢!"-->
    <!--#fsize file="不存在的文件.htm"-->

    以千字节方式显示文件大小

    1
    2
    <!--#config sizefmt="abbrev"-->
    <!--#fsizefile="news.htm"-->

    以特定的时间格式显示时间

    1
    2
    <!--#config timefmt="%Y年/%m月%d日 星期%W 北京时间%H:%M:%s,%Y年已过去了%j天 今天是%Y年的第%U个星期"-->
    <!--#echo var="DATE_LOCAL"-->

    显示今天是星期几,几月,时区

    1
    2
    <!--#config timefmt="今天%A, %B ,服务器时区是 %z,是"-->
    <!--#echo var="DATE_LOCAL"-->
  3. echo
    echo用来输出变量的值。

    1
    2
    !--#echo var="VARIABLE_NAME" -->
    <!--#echo var="变量名称"-->

    本文档名称:程序代码:

    1
    <!--#echo var="DOCUMENT_NAME"-->

    现在时间:程序代码:

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

    你的IP地址是程序代码:

    1
    <!--#echo var="REMOTE_ADDR"-->
  4. exec
    1
    <!--#exec cmd="COMMOND" -->

    exec用来执行命令。 将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入,这取决于使用的参数是cmd还是cgi。

    1
    2
    3
    4
    <!--#exec cmd="文件名称"-->
    <!--#exec cgi="文件名称"-->
    <!--#exec cmd="文件名称"-->
    <!--#exec cgi="文件名称"-->

    参数:
    cmd 常规应用程序cgi CGI脚本程序
    例子:

    1
    2
    3
    4
    <!--#exec cmd="cat /etc/passwd"-->将会显示密码文件
    <!--#exec cmd="dir /b"-->将会显示当前目录下文件列表
    <!--#exec cgi="/cgi-bin/gb.cgi"-->将会执行CGI程序gb.cgi。
    <!--#exec cgi="/cgi-bin/access_log.cgi"-->将会执行CGI程序access_log.cgi。

    注意:从上面的示例可以看出,这个指令相当方便,但是也存在安全问题。
    禁止方法:
    .Apache,将access.conf中的”Options Includes ExecCGI”这行代码删除;
    .在IIS中,要禁用 #exec 命令,可修改 SSIExecDisable 元数据库;

  5. flastmod
    1
    <!--#flastmod file="FILE_NAME" -->

    flastmod返回FILE_NAME所代表的文件的最后修改时间。
    例子:

    1
    <!--#flastmod file="news.htm"-->

    将当前目录下news.htm文件的最近更新日期插插入到当前页面

  6. fsize
    1
    <!--#fsize file="FILE_NAME" -->

    fsize返回FILE_NAME所代表的文件的大小。

    1
    2
    <!--#flastmod file="文件名称"-->
    <!--#fsize file="文件名称"-->

    参数:
    file 指定包含文件相对于本文档的位置 如 info.txt 表示当前目录下的的info.txt文档
    virtual 指定相对于服务器文档根目录的位置 如 /hoyi/info.txt 表示
    注意:
    文件名称必须带有扩展名。
    例子:

    1
    <!--#fsize file="news.htm"-->

    将当前目录下news.htm的文件大小入到当前页面

  7. include

    1
    2
    <!--#include file="文件名称"-->
    <!--#include virtual="文件名称"-->

    include插入FILE_NAME所代表的文件的内容。
    file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在
    一级目录中。如表示当前目 录下的的nav_head.htm文档,则为file=”nav_head.htm”。
    virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件;则
    file=”/hoyi/nav_head.htm”
    参数:
    file 指定包含文件相对于本文档的位置
    virtual 指定相对于服务器文档根目录的位置
    注意:
    1、文件名称必须带有扩展名。
    2、被包含的文件可以具有任何文件扩展名,我觉得直接使用htm扩展名最方便

  8. printenv
    1
    <!--#printenv -->

    printenv返回所有定义的变量的列表。

  9. set
    1
    <!--#set var="VARIABLE_NAME" value="VARIABLE_VALUE" -->

    set用来自定义变量。在SSI中有许多标准的变量(如DATE_LOCAL),其中也包括对于CGI程序有效的环境变量。

  10. if elif endif else
    if elif endif else用来条件选择。
    #if
    作用: 创建可以改变数据的页面,这些数据根据使用if语句时计算的要求予以显示。
    语法: 程序代码:

    1
    2
    3
    4
    5
    6
    7
    <!--#if expr="$变量名="变量值A""-->
    显示内容
    <!--#elif expr="$变量名="变量值B""-->
    显示内容
    <!--#else-->
    显示内容
    <!--#endif"-->

    例子:

    1
    2
    3
    4
    5
    6
    7
    <!--#if expr="$SERVER_NAME="hoyi.zb169.net""-->
    中华E搜网http://www.eshoo.com.cn
    <!--#elif expr="$SERVER_NAME="linux.cqi.com.cn"" -->
    中华E搜网http://www.eshoo.com.cn/bbs
    <!--#else-->
    中华E搜网http://www.eshoo.com.cn
    <!--#endif"-->

    注意: 用于前面指令中的反斜杠,是用来代换内部的引号,以便它们不会被解释为结束表达式。不可省略。

普通用法

  • 下面是一些比较常规的SSI的用法:
    最后修改时间 有两种方法:

    1
    2
    This file last modified <!--#flastmod file="ssi.shtml" -->
    This file last modified <!--#echo var="LAST_MODIFIED" -->

    包含一个footer

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

    设置errmsg

    1
    <!--#config errmsg="[error message!]" -->

    设置sizefmt

    1
    <!--#config sizefmt="bytes|abbrev" -->

    执行命令

    1
    <!--#exec cmd="dir" -->
  • 高级SSI
    XSSI(Extended SSI)是一组高级SSI指令,内置于Apache 1.2或更高版本的mod-include模块之中。
    其中可利用的的指令有:

    1
    2
    3
    4
    <!--#printenv-->
    <!--#printenv-->
    <!--#printenv-->
    <!--#printenv-->

    作用: 显示当前存在于WEB服务器环境中的所有环境变量。
    (1)#set
    作用:可给变量赋值,以用于后面的if语句。
    语法:
    <!–#set var=”变量名”value=”变量值”–>

    1
    <!--#set var="变量名"value="变量值"-->

    参数:
    示例:

    1
    <!--#set var="color"value="红色"-->

    SSI允许自定义变量,这些变量可以用来进行比较和条件判断。
    定义变量

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

    条件表达式

    1
    2
    3
    4
    <!--#if expr="test_condition" -->
    <!--#elif expr="test_condition" -->
    <!--#else -->
    <!--#endif -->

暂无相关文章

分类 : Html,网站 (阅览:) Tags :

评论

还没有评论呢。


留下评论


|:victory:| |:tongue:| |:titter:| |:time:| |:sweat:| |:smile:| |:shy:| |:shocked:| |:sad:| |:mad:| |:lol:| |:kiss:| |:hug:| |:huffy:| |:handshake:| |:cry:| |:call:| |:biggrin:|