SUFFER LIFE

You can start for Exploring soon after you get here in the Gate

But if you have time, please drop in at the Reception Palace first

There are many explorers on their way and you can hear lots of stories about this planet

You will have the pleasure of talking about the galaxy and the stars you live on

欢迎来到金圣达的blog





· 所有网志 · 手稿和珍藏本 · 计算机程序设计 · 音乐 · 杂集 ·
自我介绍
金圣达

22岁

天津大学学生(软件专业)

性情开朗古怪,流氓习气,爱好篮球

一直思考的问题:人活着为了什么?

jinshengda_001@hotmail.com

QQ:88080013

日历
站内搜索
友情链接
· 歪酷博客
· 我的大学
· 新浪网站

订阅 RSS

0010501

歪酷博客

« 上一篇: 一张图片 下一篇: World Wide Web上动态显示的技术 »
冷火 @ 2005-03-02 10:22

1.简介
SSI(Server Side Include),通常称为服务器端嵌入,是一种类似于ASP的基于服务器的网页制作技术。大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server等均支持SSI命令。

SSI工作原理:

在一个通常以.shtml为扩展名的SSI文件中,标准的HTML编码会被直接送到浏览器上,而内嵌Perl语言形式的SSI命令则先被网络服务器解释执行,如果是标准输出的话,输出信息也将作为标准的HTML而被送至浏览器。

SSI简单应用实例:

html

head〉〈title〉my first SSI page〈/title〉〈/head

body

欢迎您(于〈!--# echo var="date_local" --〉)访问本网站。

/html

标记在上面文档中的“〈!--# --〉”结构表明了SSI命令会被服务器翻译执行,而不是直接送到客户端。我们可以在浏览器中用“查看→源文件"观察源代码:

〈html〉

〈head〉〈title〉my first SSI page〈/title〉〈/head〉

〈body〉

欢迎您(于dec 06 1999)访问本网站。

〈/html〉

我们发现,文档中的html被直接传到了客户端,而SSI命令得到了执行。SSI代码在客户端是不可见的,客户端只能看到它执行的效果。

一个比较实用的例子

网站维护常常碰到的一个问题是,网站的结构已经固定,却为了更新一点内容而不得不重做一大批网页。SSI提供了一种简单、有效的方法来解决这一问题,它将一个网站的基本结构放在几个简单的HTML文件中(模板),以后我们要做的只是将文本传到服务器,让程序按照模板自动生成网页,从而使管理大型网站变得容易。如:

〈html〉

〈head〉〈title〉SSI example〈/title〉〈/head〉

〈body〉

h2〉新闻〈/h2

p〉〈!--# include file="news.txt" --〉

〈p〉新闻更新日期:〈!--# flastmod file="news.txt" --〉

/body

〈/html〉

将频繁的更新内容放在news.txt中,SSI会通过 include 指令将其内容包含到输出的网页中。通过 flastmod 指令可在网页中显示new.txt的最近一次更改日期。

构建学习SSI的环境

支持SSI的web server 很多,如可以选用omnihttpd profeSSIonal, 这是一款win 95/98平台下的支持SSI的web服务器。可直接从http://www.omnicron.ab.ca/httpd/下载这一共享软件。

SSI指令使用祥解
1.#echo

作用:

将环境变量插入到页面中。

语法:

<!--#echo var=”变量名称”-->

示例:

本文档名称:<!--#echo var=”DOCUMENT_NAME”-->

现在时间:<!--#echo var=”DATE_LOCAL”-->
你的IP地址是:<!--#echo var=”REMOTE_ADDR”-->

可在SSI中使用的变量: 1.只有SSI中能使用的变量。2.标准CGI变量3.某些服务器支持的变量

①下面是在标准SSI支持的变量:

  变量名称
作用
示例

1
DOCUMENT_NAME
当前文档名
echo.html

2
DOCUMENT_URL

或DOCUMENT_URI
当前文档相对URL
/ssi/echo.html

3
QUERY_STRING_UNESCAPED
或QUERY_STRING
所发送的查询字符串
sample

4
DATE_LOCAL
服务器中当前日期
Sun, 23 May 1999 21:54:30

5
DATE_GMT
以格林威冶时间设置的服务器时间
Sun, 23 May 1999 13:54:30

6
LAST_MODIFIED
当前文档最后修改时间
23-May-1999 PST


 

②标准的CGI变量
WEB上关于CGI环境变量测试的示例:

LINUX下Apache:http://hoyi.zb169.net/cgi-bin/hiecho.cgi?sample
Freebsd下Apache: http://hoyi.onlineexpress.net/cgi-bin/hiecho.cgi?sample

  CGI环境变量名称
作用
示例

1
AUTH_TYPE
用户所使用的身份验证类型
 
2
CONTENT_LENGTH
服务器输出文本长度
0

3
HTTP_ACCEPT
客户机可接受的MIME类型
application/vnd.ms-excel, application/msword, */*

4
HTTP_USER_AGENT
客户机浏览器配置状况
Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)

5
GATEWARY_INTERFACE
服务器所使用的 CGI 规范的修正版
CGI/1.1

6
PATH_INFO
客户端给出附加路径信息
 
7
PATH_TRANSLATED
PATH_INFO 的值,但带有扩展为某个目录规范的虚拟路径
/v/spool/webadm/html

8
QUERY_STRING
在引用该脚本的 URL 中跟在问号 (?) 后面的信息
Sample

9
REMOTE_ADDR
客户机IP地址
202.103.27.103

10
REMOTE_HOST
客户机名称
 
11
REQUEST_METHOD
HTTP请求方法
GET

12
SCRIPT_NAME
当前脚本名称
/cgi-main/cgiwrap/hoyi/hiecho.cgi

13
SERVER_NAME
服务器名称或IP地址
hoyi.zb169.net

14
SERVER_PORT
服务器接请求的TCP/IP端口
80

15
SERVER_PROTOCOL
与请求有关的信息检索协议的名称与版本,通常为 HTTP/1.0
HTTP/1.1

16
SERVER_SOFTWARE
响应请求的 Web 服务器软件的名称和版本
Apache/1.3.6 (Unix)




2、#include

作用:

将文本文件的内容直接插入到文档页面中。

语法:
<!--#include file=”文件名称”-->

<!--#include virtual=”文件名称”-->

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扩展名最方便,微软公司推荐使用 .inc 扩展名(这就看你的爱好了)。

示例:

<!--#include file=”nav_head.htm”-->将头文件插入到当前页面

<!--#include file=”nav_foot.htm”-->将尾文件插入到当前页面



2、#include

作用:

将文本文件的内容直接插入到文档页面中。

语法:
<!--#include file=”文件名称”-->

<!--#include virtual=”文件名称”-->

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扩展名最方便,微软公司推荐使用 .inc 扩展名(这就看你的爱好了)。

示例:

<!--#include file=”nav_head.htm”-->将头文件插入到当前页面

<!--#include file=”nav_foot.htm”-->将尾文件插入到当前页面

4.#exec

作用:

将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入,这取决于使用的参数是cmd还是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。

<!--#exec cgi=”/cgi-bin/access_log.cgi”-->将会执行CGI程序access_log.cgi。

注意:

从上面的示例可以看出,这个指令相当方便,但是也存在安全问题。

禁止方法:

.Apache,将access.conf中的”Options Includes ExecCGI”这行代码删除;

.在IIS中,要禁用 #exec 命令,可修改 SSIExecDisable 元数据库;



5.#config

作用:

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

语法:

<!--#config errmsg=”自定义错误信息”-->

<!--#config sizefmt=”显示单位”-->

<!--#config timefmt=”显示格式”-->

参数:

errmsg 自定义SSI执行错误信息,可以为任何你喜欢的方式。

sizefmt 文件大小显示方式,默认为字节方式(“bytes”)可以改为千字节方式(“abbrev”)

timefmt 时间显示方式,最灵活的配置属性。

代码
示例
作用
代码
示例
作用

%a
Mon
缩写的星期几
%m
05
月份数

%A
Monday
星期几
%M
55


%b
%h
Aug
缩写的月份名
%p
AM
上、下午(AM或PM)

%r
10:20:20 AM
12小制时间

%B
Auguest
月份名
%s
40


%d
01
当月第几天
%T
20:20:30
24小制时间

%D
05/28/99
数字日期
%U
%W
21
一年中的星期

%e
1
当月第几天,前面不放0
%w
2
从星期天至今天数

%H
20
小时(24小时制)
%y
99
2位数格式的年号

%I
08
小时(12小时制)
%Y
1999
4位数表示的年号

%j
320
一年中的天数
%z
PDT
时区位置



 

示例:

显示一个不存在文件的大小
<!--#config errmsg=”服务器执行错误,请联系管理员 yiho@126.com,谢谢!”-->

<!--#fsize file=”不存在的文件.htm”-->

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

<!--#config sizefmt=”abbrev”-->

<!--#fsizefile=”news.htm”-->

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

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

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

显示今天是星期几,几月,时区
<!--#config timefmt=”今天%A, %B ,服务器时区是 %z,是”-->

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



6.XSSI

XSSI(Extended SSI)是一组高级SSI指令,内置于Apache 1.2或更高版本的mod-include模块之中。

其中可利用的的指令有:

#printenv

#set

#if

#printenv

作用:

显示当前存在于WEB服务器环境中的所有环境变量。

语法:<!--#printenv-->

参数:无

示例:

<!--#printenv-->

#set

作用:可给变量赋值,以用于后面的if语句。

语法:<!--#set var=”变量名”value=”变量值”-->

参数:无

示例:

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

#if

作用:

创建可以改变数据的页面,这些数据根据使用if语句时计算的要求予以显示。

语法:

<!--#if expr=”$变量名=\”变量值A\””-->

显示内容

<!--#elif expr=”$变量名=\”变量值B\””-->

显示内容

<!--#else-->

显示内容

<!--#endif”-->

参数:

关于XSSI的条件表达式

表达式
作用

(string)
如果string存在,就返回真

string1=string2
如果两个字符串相等,就返回真

string1!=string2
如果两个字符串不等,就返回真

string1<string2
如果string1小于string2,就返回真

string1<=string2
如果string1小于等于string2,就返回真

string1>string2
如果string1大于string2,就返回真

string1>=string2
如果string1大于等于string2,就返回真

!string
!为”非”操作符;若string存在,就返回真

(string1)&&(string2)
&&为”与”操作符;string1、string2都存在,就返回真

(string1)!!(string2)
!! 为”或”操作符;string1、string2有一个存在,就返回真



示例:

<!--#if expr=”$SERVER_NAME=\”hoyi.zb169.net\””-->

欢迎光临好易CGI工厂在淄博热线的分站http://hoyi.zb169.net。

<!--#elif expr=”$SERVER_NAME=\”linux.cqi.com.cn\”” -->

欢迎光临好易CGI工厂在太阳城的分站http://linux.cqi.com.cn/~hoyi。

<!--#else-->

欢迎光临好易CGI工厂!

<!--#endif”-->

注意:

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





评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定