posts - 431,  comments - 344,  trackbacks - 0
          公告
           Don't Repeat Yourself
          座右銘:you can lose your money, you can spent all of it, and if you work hard you get it all back. But if you waste your time, you're never gonna get it back.
          公告本博客在此聲明部分文章為轉摘,只做資料收集使用。


          微信: szhourui
          QQ:109450684
          Email
          lsi.zhourui@gmail.com
          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          留言簿(15)

          隨筆分類(1019)

          文章分類(3)

          文章檔案(21)

          收藏夾

          Link

          好友博客

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 865191
          • 排名 - 44

          最新評論

          閱讀排行榜

          什么是 SHTML
          使用SSIServer Side Include)的html文件擴展名,SSIServer Side Include),通常稱為服務器端嵌入或者叫服務器端包含,是一種類似于ASP的基于服務器的網頁制作技術。
          SSI
          工作原理:
          將內容發送到瀏覽器之前,可以使用服務器端包含 (SSI)”指令將文本、圖形或應用程序信息包含到網頁中。例如,可以使用 SSI 包含時間/日期戳、版權聲明或供客戶填寫并返回的表單。對于在多個文件中重復出現的文本或圖形,使用包含文件是一種簡便的方法。將內容存入一個包含文件中即可,而不必將內容輸入所有文件。通過一個非常簡單的語句即可調用包含文件,此語句指示 Web 服務器將內容插入適當網頁。而且,使用包含文件時,對內容的所有更改只需在一個地方就能完成。
          因為包含 SSI 指令的文件要求特殊處理,所以必須為所有 SSI 文件賦予 SSI 文件擴展名。默認擴展名是 .stm、.shtm .shtml
          Web
          服務器在處理網頁的同時處理 SSI 指令。當 Web 服務器遇到 SSI 指令時,直接將包含文件的內容插入 HTML 網頁。如果包含文件中包含 SSI 指令,則同時插入此文件。除了用于包含文件的基本指令之外,還可以使用 SSI 指令插入文件的相關信息(如文件的大?。┗蛘哌\行應用程序或 shell 命令。
          網站維護常常碰到的一個問題是,網站的結構已經固定,卻為了更新一點內容而不得不重做一大批網頁。SSI提供了一種簡單、有效的方法來解決這一問題,它將一個網站的基本結構放在幾個簡單的HTML文件中(模板),以后我們要做的只是將文本傳到服務器,讓程序按照模板自動生成網頁,從而使管理大型網站變得容易。
          所以,利用SHTML格式的頁面目的和 ASP 差不多,但是因為是 API 所以運轉速度更快,效率更高,ASP快,比HTML慢,但由于可以使用服務器端包含,因此使頁面更新容易(特別是批量更新banner,版權等),想象一下吧,你有一段 HTML,要在中間穿插一些特殊的服務端腳本,比如插入其他 HTML 段落,你選擇 ASP 來完成這個任務,但是如果任務更繁重,需要更多的時間,比如 5 s,這個時候你不用 ASP 而用  SHTML,或許處理時間就只用 4s 了。
          SSI
          有什么用?
          之所以要扯到ssi,是因爲 shtml--server-parsed HTML 的首字母縮略詞。包含有嵌入式服務器方包含命令的 HTML 文本。在被傳送給瀏覽器之前,服務器會對 SHTML 文檔進行完全地讀取、分析以及修改。shtmlasp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中寫入SSI指令,當客戶端訪問這些shtml文件時,服務器端會把這些SHTML文件進行讀取和解釋,把SHTML文件中包含的SSI指令解釋出來比如:你可以在SHTML文件中用SSI指令引用其他的html文件(#include ),服務器傳送給客戶端的文件,是已經解釋的SHTML不會有SSI指令。它實現了HTML所沒有的功能,就是可以實現了動態的SHTML,可以說是HTML的一種進化吧。像新浪的新聞系統就是這樣的,新聞內容是固定的但它上面的廣告和菜單等就是用#include引用進來的。
          目前,主要有以下幾種用用途:
          顯示服務器端環境變量<#echo>
          將文本內容直接插入到文檔中<#include>
          顯示WEB文檔相關信息<#flastmod #fsize> (如文件制作日期/大小等)
          直接執行服務器上的各種程序<#exec>(CGI或其他可執行程序)
          設置SSI信息顯示格式<#config>(如文件制作日期/大小顯示方式)
          高級SSI<XSSI>可設置變量使用if條件語句。
          使用SSI
          SSI
          是為WEB服務器提供的一套命令,這些命令只要直接嵌入到HTML文檔的注釋內容之中即可。如:
          <!--#include file="info.htm"-->
          就是一條SSI指令,其作用是將"info.htm"的內容拷貝到當前的頁面中,當訪問者來瀏覽時,會看到其它HTML文檔一樣顯示info.htm其中的內容。其它的SSI指令使用形式基本同剛才的舉例差不多,可見SSI使用只是插入一點代碼而已,使用形式非常簡單。當然,如果WEB服務器不支持SSI,它就會只不過將它當作注釋信息,直接跳過其中的內容;瀏覽器也會忽略這些信息。
          如何在我的WEB服務器上配置SSI功能?
          在一些WEB服務器上(如IIS 4.0/SAMBAR 4.2),包含 #include 指令的文件必須使用已被映射到 SSI 解釋程序的擴展名;否則,Web 服務器將不會處理該SSI指令;默認情況下,擴展名 .stm、.shtm .shtml 被映射到解釋程序(Ssinc.dll)。
          Apache
          則是根據你的設置情況而定,修改srm.conf如:
          AddType text/x-server-parsed-html .shtml
          將只對.shtml擴展名的文件解析SSI指令
          AddType text/x-server-parsed-html .html
          將對所有HTML文檔解析SSI指令
          Netscape WEB
          服務器直接使用 Administration Server(管理服務器)可打開SSI功能。
          Website
          使用 Server Admin 程序中的 Mapping 標簽,擴展名添加內容類型為:wwwserver/html-ssi
          Cern
          服務器不支持SSI,可用SSI詐騙法,到 http://sw.cse.bris.ac.uk/WebTools/fakessi.html 上下載一個PERL腳本,即可使你的CERN服務器使用一些SSI指令。(不支持exec指令。)

          SSI指令基本格式
          程序代碼:
          <!--
          指令名稱="指令參數">
          示例:
          <!--#include file="info.htm"-->
          說明:
          <!-- -->
          HTML語法中表示注釋,當WEB服務器不支持SSI時,會忽略這些信息。
          #include
          SSI指令之一。
          file
          include的參數, info.htm為參數值,在本指令中指將要包含的文檔名。
          注意:
          <!--
          #號間無空格,只有SSI指令與參數間存在空格。
          上面的標點="",一個也不能少。
          SSI
          指令是大小寫敏感的,因此參數必須是小寫才會起作用。
          SSI
          指令使用詳解
          #echo
          示范
          作用:將環境變量插入到頁面中。
          語法:
          <!--#echo var="
          變量名稱"-->
          示例:
          <!--#echo var="DOCUMENT_NAME"-->
          本文檔名稱
          <!--#echo var="DATE_LOCAL"-->
          現在時間
          <!--#echo var="REMOTE_ADDR"-->
          你的IP地址
          #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
          指定相對于服務器文檔根目錄的位置
          注意:
          文件名稱必須帶有擴展名。
          被包含的文件可以具有任何文件擴展名,我覺得直接使用htm擴展名最方便,微軟公司推薦使用 .inc 擴展名(這就看你的愛好了)。
          示例:
          <!--#include file="nav_head.htm"-->
          將頭文件插入到當前頁面
          <!--#include file="nav_foot.htm"-->
          將尾文件插入到當前頁面
          #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的文件大小入到當前頁面
          #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 元數據庫;
          #config
          作用:指定返回給客戶端瀏覽器的錯誤信息、日期和文件大小的格式。
          語法:
          <!--#config errmsg="
          自定義錯誤信息"-->
          <!--#config sizefmt="
          顯示單位"-->
          <!--#config timefmt="
          顯示格式"-->
          參數:
          errmsg
          自定義SSI執行錯誤信息,可以為任何你喜歡的方式。
          sizefmt
          文件大小顯示方式,默認為字節方式("bytes")可以改為千字節方式("abbrev")
          timefmt
          時間顯示方式,最靈活的配置屬性。
          示例:顯示一個不存在文件的大小
          <!--#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"-->
          XSSI
          XSSI
          Extended SSI)是一組高級SSI指令,內置于Apache 1.2或更高版本的mod-include模塊之中。
          其中可利用的的指令有:
          #printenv
          #set
          #if
          #printenv
          作用:顯示當前存在于WEB服務器環境中的所有環境變量。
          語法:
          <!--#printenv-->
          #set
          作用:可給變量賦值,以用于后面的if語句。
          語法:
          <!--#set var="
          變量名" value="變量值"-->
          <!--#set var="
          變量名"value="變量值"-->
          示例:
          <!--#set var="color" value="
          紅色"-->
          <!--#set var="color" value="
          紅色"-->
          #if
          作用:創建可以改變數據的頁面,這些數據根據使用if語句時計算的要求予以顯示。
          語法:
          <!--#if expr="$
          變量名=""變量值A"""-->
           
          顯示內容
          <!--#elif expr="$
          變量名=""變量值B"""-->
           
          顯示內容
          <!--#else-->
           
          顯示內容
          <!--#endif"-->
          示例:
          <!--#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"-->
          注意:用于前面指令中的反斜杠,是用來代換內部的引號,以便它們不會被解釋為結束表達式。不可省略。
          1
          Config 命令
          Config
          命令主要用于修改SSI的默認設置。其中:
          Errmsg
          :設置默認錯誤信息。為了能夠正常的返回用戶設定的錯誤信息,在HTML文件中Errmsg參數必須被放置在其它SSI命令的前面,否則客戶端只能顯示默認的錯誤信息,而不是由用戶設定的自定義信息。
          <!--#config errmsg="Error! Please email webmaster@mydomain.com" -->
          Timefmt
          :定義日期和時間的使用格式。Timefmt參數必須在echo命令之前使用。
          <!--#config timefmt="%A, %B %d, %Y"-->
          <!--#echo var="LAST_MODIFIED" -->
          顯示結果為:
          Wednesday, April 12, 2000
          也許用戶對上例中所使用的%A %B %d感到很陌生,下面我們就以表格的形式總結一下SSI中較為常用的一些日期和時間格式。
          Sizefmt
          :決定文件大小是以字節、千字節還是兆字節為單位表示。如果以字節為單位,參數值為"bytes";對于千字節和兆字節可以使用縮寫形式。同樣,sizefmt參數必須放在fsize命令的前面才能使用。
          <!--#config sizefmt="bytes" -->
          <!--#fsize file="index.html" -->
          2
          、Include 命令
          Include
          命令可以把其它文檔中的文字或圖片插入到當前被解析的文檔中,這是整個SSI的關鍵所在。通過Include命令只需要改動一個文件就可以瞬間更新整個站點!
          Include
          命令具有兩個不同的參數:
          Virtual
          :給出到服務器端某個文檔的虛擬路徑。
          File
          :給出到當前目錄的相對路徑,其中不能使用"../",也不能使用絕對路徑。
          <!--#include virtual="/includes/header.html" -->
          <!--#include file="header.html" -->
          這就要求每一個目錄中都包含一個header.html文件。
          3
          、Echo 命令
          Echo
          命令可以顯示以下各環境變量:
          DOCUMENT_NAME
          :顯示當前文檔的名稱。
          DOCUMENT_URI
          :顯示當前文檔的虛擬路徑。例如:
          <!--#echo var="DOCUMENT_NAME" -->
          <!--#echo var="DOCUMENT_URI" -->
          隨著網站的不斷發展,那些越來越長的URL地址肯定會讓人頭疼。如果使用SSI,一切就會迎刃而解。因為我們可以把網站的域名和SSI命令結合在一起顯示完整的URL,即:
          http://YourDomain<;!--#echo var="DOCUMENT_URI" -->
          QUERY_STRING_UNESCAPED
          :顯示未經轉義處理的由客戶端發送的查詢字串,其中所有的特殊字符前面都有轉義符"""。例如:
          <!--#echo var="QUERY_STRING_UNESCAPED" -->
          DATE_LOCAL
          :顯示服務器設定時區的日期和時間。用戶可以結合config命令的timefmt參數,定制輸出信息。例如:
          <!--#config timefmt="%A, the %d of %B, in the year %Y" -->
          <!--#echo var="DATE_LOCAL" -->
          顯示結果為:
          Saturday, the 15 of April, in the year 2000
          DATE_GMT
          :功能與DATE_LOCAL一樣,只不過返回的是以格林尼治標準時間為基準的日期。例如:
          <!--#echo var="DATE_GMT" -->
          LAST_MODIFIED
          :顯示當前文檔的最后更新時間。同樣,這是SSI中非常實用的一個功能,只要在HTML文檔中加入以下這行簡單的文字,就可以在頁面上動態的顯示更新時間。
          <!--#echo var="LAST_MODIFIED" -->
          CGI
          環境變量
          除了SSI環境變量之外,echo命令還可以顯示以下CGI環境變量:
          SERVER_SOFTWARE
          :顯示服務器軟件的名稱和版本。例如:
          <!--#echo var="SERVER_SOFTWARE" -->
          SERVER_NAME
          顯示服務器的主機名稱,DNS別名或IP地址。例如:
          <!--#echo var="SERVER_NAME" -->
          SERVER_PROTOCOL
          :顯示客戶端請求所使用的協議名稱和版本,如HTTP/1.0。例如:
          <!--#echo var="SERVER_PROTOCOL" -->
          SERVER_PORT
          :顯示服務器的響應端口。例如:
          <!--#echo var="SERVER_PORT" -->
          REQUEST_METHOD
          :顯示客戶端的文檔請求方法,包括GET, HEAD, POST。例如:
          <!--#echo var="REQUEST_METHOD" -->
          REMOTE_HOST
          :顯示發出請求信息的客戶端主機名稱。
          <!--#echo var="REMOTE_HOST" -->
          REMOTE_ADDR
          :顯示發出請求信息的客戶端IP地址。
          <!--#echo var="REMOTE_ADDR" -->
          AUTH_TYPE
          :顯示用戶身份的驗證方法。
          <!--#echo var="AUTH_TYPE" -->
          REMOTE_USER
          :顯示訪問受保護頁面的用戶所使用的帳號名稱。
          <!--#echo var="REMOTE_USER" -->
          4
          Fsize:顯示指定文件的大小,可以結合config命令的sizefmt參數定制輸出格式。
          <!--#fsize file="index_working.html" -->
          5
          、Flastmod:顯示指定文件的最后修改日期,可以結合config 命令的timefmt參數控制輸出格式。
          <!--#config timefmt="%A, the %d of %B, in the year %Y" -->
          <!--#flastmod file="file.html" -->
          這里,我們可以利用flastmod參數顯示出一個頁面上所有鏈接頁面的更新日期。方法如下:
          <!--#config timefmt=" %B %d, %Y" -->
          <A HREF="/directory/file.html">File</A>
          <!--#flastmod virtual="/directory/file.html" -->
          <A HREF="/another_directory/another_file.html">Another File</A>
          <!--#flastmod virtual="/another_directory/another_file.html" -->
          顯示結果為:
          File April 19, 2000
          Another File January 08, 2000
          6
          、Exec
          Exec
          命令可以執行CGI腳本或者shell命令。使用方法如下:
          Cmd
          :使用/bin/sh執行指定的字串。如果SSI使用了IncludesNOEXEC選項,則該命令將被屏蔽。
          Cgi
          :可以用來執行CGI腳本。例如,下面這個例子中使用服務端cgi-bin目錄下的counter.pl腳本程序在每個頁面放置一個計數器:
          <!--#exec cgi="/cgi-bin/counter.pl" -->
          關于SHTMLHTML的區別
          讓我們先來看看SHTMLHTML的區別,如果用一句話來解釋就是:SHTML 不是HTML而是一種服務器 API,shtml是服務器動態產成的html.                                        
          雖然兩者都是超文本格式,shtml是一種用于SSI技術的文件。也就是Server Side Include--SSI 服務器端包含指令。如果Web ServerSSI功能的話,大多數(尤其是基于Unix平臺)的WEB服務器,如Netscape Enterprise Server等均支持SSI命令。

          posted on 2008-01-18 11:17 周銳 閱讀(1341) 評論(0)  編輯  收藏 所屬分類: Other
          主站蜘蛛池模板: 嵩明县| 桐梓县| 塔河县| 安顺市| 汤阴县| 农安县| 美姑县| 临海市| 措美县| 鄯善县| 闻喜县| 策勒县| 庆阳市| 濮阳市| 台州市| 青岛市| 额尔古纳市| 仙游县| 滦平县| 托克逊县| 汉中市| 大渡口区| 韶山市| 望江县| 永宁县| 巴中市| 满洲里市| 光山县| 临泉县| 绵竹市| 太原市| 花垣县| 昌平区| 深圳市| 紫阳县| 台南市| 姜堰市| 莱阳市| 贺州市| 防城港市| 富川|